개발공부/Spring(24)
-
[Spring] DI(Dependency Injection) 스프링 의존성 주입
의존성 주입에는 대표적으로 두 가지 방식이 있습니다. 필드 주입과 생성자 주입입니다. Spring 4.3부터 생성자가 하나 뿐인 클래스는 생성자 주입을 사용할 때 @Autowired를 생략해줄 수 있습니다. 생성자 주입의 장점은 필드에 @Autowired를 쓸 경우 테스트 클래스에서 의존하고 있는 객체를 주입해주지 않아 NPE가 발생하는 케이스를 방지할 수 있습니다. 그리고 필드 주입은 주입된 인스턴스를 불변으로 만들지 못하지만, 생성자 주입은 가능합니다. 이는 필드 주입은 객체를 생성하고 의존성을 Reflection으로 주입 받기 때문입니다. @Service public class DatabaseAccountService implements AccountService { private final Ris..
2022.05.16 -
[Spring] Collection 타입을 생성자 방식으로 주입하기
클래스 인스턴스가 초기화 될 때, A 인터페이스를 구현하는 Bean들을 List로 받고 싶다면 아래와 같은 코드를 사용하시면 됩니다. public class CollectionInject { //생성자 주입 방식에서 생성자를 의존주입 생성자 하나만 사용한다면 @Autowired가 생략가능 합니다. 그렇지 않고 다른 새성자도 사용할거라면 @Autowired로 명시해줘야 Spring이 어떤 생성자가 의존주입 생성자를 인지합니다. @Autowired //Spring은 InterfaceA를 구현한 Bean들을 모두 listOfImplementationA 리스트에 add 해줍니다. public CollectionInject(List listOfImplementationA) { for (InterfaceA inte..
2022.01.05 -
[JWT] JWT(Json Web Token)
JWT(Json Web Token) Authentication을 마치고 Authorization이 일어날 때, 기존의 방식인 session과 달리 JWT는 scalability와 multiple device 사용이 가능합니다. JWT는 DB를 거치지 않고 Base64로 인코딩된 토큰을 헤더에 전달해 서버에서 validate 한다음 Authorization을 주는 토큰방식입니다. JWT는 .으로 구분된 세개의 부분이 존재합니다. 첫 부분은 header로 알고리즘 종류와 토큰 타입이 담깁니다. 두 번째 부분은 payload로 비즈니스 도메인에서 식별이 필요한 내용(ex. 사용자 이름, id 등)이 들어갑니다. 그리고 마지막 3번째는 앞선 두 부분에 담긴 정보를 공개되지 않은 secret key를 활용해 En..
2021.10.30 -
[@RequsetBody] @RequestBody와 생성자
@RequestBody와 생성자 결론부터 얘기하자면 @RequestBody는 기본 생성자가 필요합니다. @Builder + (@NoArgsConstructor, @AllArgsConstructor) 같이 쓰는 것과 마찬가지죠. 결론을 봤으니 이해를 위해 원리를 알아야 됩니다. 그러기 위해 Serialize 직렬화, Deserialize 역직렬화를 알아야 합니다. 직렬화는 JSON과 관련이 있는데요, Java Object를 JSON으로 파싱해주는 과정을 직렬화라고 부릅니다. 역직렬화라는 용어는 잘 쓰진 않지만 JSON을 Object로 변환하는 것입니다. @RequestBody가 자동으로 처리해주기 때문이죠. Jackson의 ObjectMapper 클래스가 readValue()라는 메서드로 역직렬화를 해주는..
2021.09.11 -
(2) Serialization
객체를 byte-stream형식으로 작성하는 메커니즘이며 Hibernate, RMI, JPA 등에 사용됩니다. 반대의 경우, byte-stream를 객체로 변경시키는 건 deserialization이라고 합니다. writeObject() ; serialization와 readObject();deserialization 메서드가 있습니다. 참고자료 : 김영한님 인프런 강의 질의답변 Serialize(직렬화) : - (서버에 전송할) 객체를 byte 스트림으로 변환 - 내부에서 직렬화를 사용할 경우는 드물지만, JPA 표준 스펙에 Entity에 Serializeble을 구현하도록 명시돼 있기 때문에 구현하는 것이 좋음 연관 인터페이스 : Serializable : 메서드나 멤버가 없는 marker형 인터페이..
2021.06.02 -
(1) Exception Handling
예외 처리(Exception Handling)은 Controller에서 바로 처리(handling)하지 않는 것이 좋습니다. 중복이 발생해 클린하지 않은 코드가 되기 때문입니다. 횡단 관심사(Aspect)로 두어 한 곳에서 처리하는 것이 바람직합니다. 처리할 수 있는 방법은 3가지가 있습니다. - Http Status Return 방법 : 예외 클래스를 만들어 @ResponseStatus 어노테이션을 클래스에 부여합니다. Controller 클래스에서 예외가 발생할 것 같은 지점에 해당 클래스 객체를 사용합니다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 //Exception @ResponseStatus(value=HttpStatus.NOT_FOUND, reason="No..
2021.03.22