이번주 스프링 과제가 총 2개가 있었는데, 이 중에서 첫번째 과제만을 완료하고 이후에 어떤것을 할지에 대해서 고민을 하다가 결국 오늘 기술매니저님께 여쭤보고 기존에 생각했던대로 진행하기로 했다...
이번에 과제를 진행하는데 있어서 결국 몇번의 도움을 받아서... 즉, 혼자서 만으로는 해결을 못 한 경우가 있었다.
그렇기에 이번 과제 2개중에 하나만 진행하고 나머지 하나는 그냥 진행하지 말고 이번 과제를 진행하는데 있어서 부족하다고 느껴 어려웠던 부분을 보충하기로 결정했다.
그래서 지금 나의 목표는 그간 멈춰있던 자바 공부를 진행하고, 스프링 부분에 관해서는 과제를 진행하고 나온 결과물을 보면서 복습을 하는 것을 이번주 목표로 삼았다.
우선 위의 것들을 진행하기에 앞서 여기에 남길 글은 이번주차 항해에서 진행한 팀 과제에서 개인적으로 조사한 것을 담기로 했다.
질문 1
스프링 프레임워크는 어떤 특징 혹은 장점을 가지고 있나요? (3가지 이상)
프레임 워크란?
프로그램의 기초를 구축할 수 있는 코드의 집합
개발자의 능력에 따라 결과물의 완성도가 천차만별이기 때문에, 이를 극복하고자 하여 나온 결과물이 프레임워크이다.
이를 사용하면, 프로그램의 기본 뼈대와 틀을 정하고, 이 틀돠 뼈대에 맞게 살을 붙이며 코드를 작성한면 된다.
스프링 프레임워크란?
Java 를 기반으로 하는 프레임워크를 말한다.
한국에서는 공공기관 웹 서비스 개발 시, 사용을 권장하는 전자정부 표준 프레임워크 이다.
다른 프레임워크들의 포용이 가능하다.
장점
- 다른 프레임워크들의 포용, 즉, 기본 뼈대를 흔들지 않고 다른 프레임워크를 혼용해서 사용이 가능하다.
- POJO 기반의 구성으로 인해 코드를 개발시 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않다. 이는 Java 코드를 이용해서 객체를 구성하는 방식을 그대로 스프링에서 사용할 수 있다는 의미이다.
- DI(의존성 주입) 하나의 객체가 다른객체의 의존성을 제공한다. 외부에서 필요한 객체를 주입할 수 있다.
- 관점지향프로그래밍(AOP) 를 지원한다. 이 패러다임을 통해서 반복적인 코드를 줄이고, 핵심 비즈니스 로직에만 집중이 가능하다.
단점
- 내부에서 즉, 자체적으로 많은 기능을 가지고 있기 때문에 프로그램이 무겁다.
- 많은 기능을 제공하는 만큼 편리하지만, 그만큼 이 기능들을 습득하기 위해서는 많은 시간과 노력이 필요하다.
참고한 블로그 링크
스프링 프레임워크의 장,단점 및 특징
스프링 프레임워크의 특징을 설명하고, 장점 및 단점을 포스팅합니다.프레임워크는 프로그램의 기초를 구축할 수 있는 코드의 집합입니다. 개발자라는 직업은 각 개발자의 능력에 따라 결과물
velog.io
질문 2
스프링에서 DI (의존성 주입) 를 사용하는 이유가 무엇인가요? 예를 통해 설명 해 보세요.
의존성 주입 이란?
DI(Dependency Injection) 라고 한다. 우리 말로는 의존관계 주입
클래스 외부에서 객체를 생성하여 해당 객체를 클래스 내부에 주입하는 것을 의미한다.
이를 이용한 방법에는 여러가지가 있는데 이제껏 했는것들에 서 찾으면 Service 에서 Repository 를 가져오는 경우가 그 예가 될 수 있다.
외부에서 UserService 인스턴스를 만들어 우리가 필요한 컨트롤러 클래스에 주입한다.
이러한 인스턴스를 저장하는 공간을 Container 라 부르며, 제어 권한이 더이상 Controller 에 있는것이 아니라 Container 에 있다고 보면 된다.
이를 IOC(제어의 역전) 이라 부르며, 인스턴스를 저장하는 Container 를 IOC Container 라고 부른다.
참고한 블로그 링크
의존성 주입이란 무엇이며 왜 필요한가?
목표 의존성 주입이 무엇인지 이해한다. 의존성 주입이 왜 필요한지 이해한다. 의존성 주입이란? 의존성 주입이란 클래스간 의존성을 클래스 외부에서 주입하는 것을 뜻한다. 더 자세하게는 의
kotlinworld.com
질문 3
ORM, JPA, Spring Data JPA 를 구분해서 설명해 보세요.
ORM
Object-Relational Mapping 의 약자로, 객체와 관계형 데이터를 매핑하기 위한 기술을 의미한다.
이는 객체지향 언어와 관계형 데이터베이스 사이의 패러디임의 불일치가 있기 때문이다. 이는 서로간의 데이터 표현 방식의 차이로 인해서 발생한다.
즉, 이 둘의 목표와 동작 방식이 다르기 때문이다.
ORM 은 위에서 말한 저러한 문제를 해결해주기 위해서 사용된다. 이를 통해 개발자가 개발에 더 집중 할 수 있게 된다.
JPA
Java persistence API 의 약자로, 자바 ORM 기술에 대한 API 표준 명세이다.
쉽게 말해서 인터페이스의 모음을 의미하며, 이러한 JPA 인터페이스를 구현한 대표적인 프레임워크가 (Hibernate) 이다.
JPA 는 애플리케션과 JDBC 사이에서 동작한며, 이를 사용하면 DB에 저장하고 관리할 때, 개발자가 직접 SQL 문을 작성하지 않아도 된다.
즉, JPA 가 개발자 대신 적절한 SQL 을 생성해서 DB 에 전달하고, 객체를 자동으로 Mapping 해준다.
Spring Data JPA
JPA 를 편리하게 사용할 수 있도록 지원하는 프로젝트(모듈) 이다.
더 풀어서 말하면 프레임워크의 한 파트로 JPA 를 이용한 구현체를 더 추상화시키고 더 쉽고 간편하게 JPA 를 이용한 프로젝트를 개발할 수 있게 해 주는 Spring 모듈이다.
사용 방법으로는 Repository 라는 인터페스를 제공함으로써 작동한다.
참고한 블로그 링크
[Spring] Spring Data JPA 이해하기 (feat ORM, JPA)
🌱 ORM 이란? ORM 이란 Object-Relational Mapping 의 약자로, 이름 그대로 객체(Object)와 관계형 데이터(Relational data) 를 매핑하기 위한 기술이다. 이러한 매핑이 필요한 이유는 객체 지향 언어과 관계형 데
doing7.tistory.com
[JPA] JPA란 무엇인가?
[JPA] JPA란 무엇인가?
velog.io
[JPA] JPA란? Spring Data JPA로 간단 예제 프로젝트 구현
안녕하세요, 저는 주로 Mybatis로 쿼리를 직접 작성하여 DB 데이터를 가져와 처리하던 전통적인 자바 프로젝트를 많이 다뤘었는데요, 예전에 JPA를 잠깐 접해볼 일이 생겼는데 정말 신세계를 경험
kim-oriental.tistory.com
질문 4
인증, 인가를 구분해서 설명해 보세요.
인증 Authentication / 인가 Authorization
인증이란 유저가 누구인지 확인하는 절차, 회원가입하고 로그인 하는 것을 의미한다.
인가란 유저에 대한 권한을 허락하는 행위를 말한다.
인증
- 어떠한 개체의 신원을 확인하는 과정
- 일반적으로 어떠한 인증요소를 증거로 자신을 증명한다.
- 온라인으로 치면 ID 와 패스워드를 입력하는 행위가 이에 해당한다.
- 여러개의 절차가 있을 수 있다.
- 은행의 경우, 본인인증, OTP, 보안카드 등의 절차를 예로 들 수 있다.
인가
- 어떤 리소스에 접근할 수 있는지, 어떤 동작을 수행할 수 있는지 검증한다.
- 접근 권한을 얻는 일을 말한다.
- 게시글로 치면 모든 게시글을 삭제하기 위해서 관리자 권한이 필요하다.
- 인터넷 기반 앱에서는 보통 토큰이라 부르는 것을 사용한다.
- 유저는 자신의 인가 세부사항을 가진 토큰을 통해 서버에 인증 받는다.
- 서버는 유저의 토큰을 보고 권한이 있는지 판단한다.
인증과 인가
인증과 인가는 한번에 쓰일 수도 있다.
회사에 출근하면 찍는 지문 인식기는 내가 누구인지도 인식하면서 동시에, 내가 회사 출입문을 통과할 수 있도록 회사 내부 접근을 인가하기도 한다.
하지만 인가는 인증으로 이어지지 않을 수도 있다. 편의점에서 구매한 버스카드는 내가 누구인지에 대한 인증 정보는 담고 있지 않지만, 잔액이 충분하다면 얼마든지 버스 탑승을 인가받을 수 있다.
참고한 블로그 링크
인증 (Authentication) 과 인가 (Authorization) 의 차이를 알아보자.
인증(Authentication)과 인가(Authorization) 인증, Authentication 내가 누군지 알아? 여기 내 명함 봐봐! by 40대 꼰대 어떤 개체의 신원을 확인하는 과정이다. 보통 어떤 인증요소를 증거로 자신을 증명한다.
jake-seo-dev.tistory.com
질문 5
절차지향 프로그래밍, 객체지향 프로그래밍, 관점지향 프로그래밍은 각각 어떻게 다른가요? (각각 예제 1개 이상)
절차지향 프로그래밍
컴퓨터가 해야 할 일을 시간의 흐름에 따라 순차적으로 프로그래밍 하는 방식
컴퓨터의 작업 처리 방식과 유사하기 때문에 처리 시간이 빠르지만 유지보수 및 디버깅이 어려움
대표적인 언어로는 C 언어가 있다.
예로는 메모를 할 때, 하나의 메모장에 생각나는대로 순차적으로 작성하는 경우가 있다.
객체지향 프로그래밍
역할별로 클래스를 나누어 프로그래밍 하는 방식
하나의 사물(객체) 에 하나의 의미를 부여하듯이 프로그래밍 한다.
핵심 기능을 모듈화 하여 하드웨어가 같은 기능을 중복으로 연산하지 않도록 하고, 모듈을 재활용 할 수 있기 때문에 하드웨어의 처리양을 획기적으로 줄여준다.
하지만, 처리속도가 절차지향 보다 느리고 설계에 많은 시간이 든다.
예로는
- 무언가를 자를것이 필요하면 "가위" 를 떠올린다. ( class Sciccors )
- 종이에 적을 게 필요하면 "연필" 을 떠올린다. ( class Pen )
- 클래스 > TV, 객체 > 프로그램
관점지향 프로그래밍
객체지향을 더욱 발전 시키기 위한 개념의 하나
하나의 소프트웨어가 하나의 거대한 OOP 로써 설계, 프로그래밍 되었다면 이것을 각 기능별로 모듈화 해서 분리 시키는 개념이다.
기능별로 class 를 분리했음에도 불구하고 생기는 중복코드의 단점을 해결 하고자 나온 방식, 공통기능과 핵심부분을 분리하여, 필요할 때에만 공통 기능을 핵심부위에 넣어주는 방식
CORE CONCERN(핵심 관심) : 각 서비스의 핵심 비즈니스 로직
예) 계좌이체, 입출금, 이자계산
Crosscut Concern(횡단 관심) : 공통 모듈
예) 보안, 예외처리, 로깅 등
질문 6
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor 이 3개의 어노테이션의 차이점
@NoArgsConstructor
기본 생성자를 생성해준다.
이 경우 초기값 세팅이 필요한 final 변수가 있을 경우 컴파일 에러가 발생함으로 주의한다.
@NoArgsConstructor(force=true) 를 사용하면 null, 0 등 기본 값으로 초기화 된다.
Board board = new Board();
@RequiredArgsConstructor
final 변수, Notnull 표시가 된 변수처럼 필수적인 정보를 세팅하는 생성자를 만들어준다.
아래와 같이 싱글톤을 만들 때 사용이 가능하다.
Board board = new Board(2L); @RequiredArgsConstructor public class BoardService { private final BoardRepository boardRepository;
@AllArgsConstructor
전체 변수를 생성하는 생성자를 만들어준다.
아래와 같이 전체 값을 만들어주는 생성자를 만들 수 있다.
Board board = new Board(2L, "content value"); @AllArgsConstructor public class MsgResponseDto { private String msg; private int statusCode; }
참고한 블로그 링크
[lombok] 생성자 관련 어노테이션 @NoArgsConstructor @RequiredArgsConstructor @AllArgsConstructor
롬복을 사용하면 깔끔하게 getter, setter , 생성자 등등 만들어준다! 근데 잘 모르고 사용하다 보면 에러가 발생할 수 있음. 주의하자. @NoArgsConstructor @RequiredArgsConstructor @AllArgsConstructor public class Board
goyunji.tistory.com
'일기' 카테고리의 다른 글
2022-12-08 (0) | 2022.12.08 |
---|---|
2022-12-07 (0) | 2022.12.07 |
2022-12-05 (0) | 2022.12.05 |
2022-12-03 (0) | 2022.12.02 |
2022-12-02 (2) | 2022.12.02 |