Spring Framework13 Spring Event 를 활용한 예약 푸쉬 발송 보호되어 있는 글 입니다. 2023. 4. 5. Spring Security 디버깅 방법 Spring Security는 여러 필터에서 OAuth2.0 인증을 처리하는데요. 필터 목록을 갖고 있는 FilterChainProxy을 확인 해보면 디버깅의 실마리를 찾을 수 있습니다. 스프링 시큐리티가 어떤 식으로 OAuth2.0을 구현하는지 또는 에러가 났는데 API 호출로는 에러가 났다는 것 이외에 별다른 정보가 없을 때 디버깅하는 방법을 소개하겠습니다. 1. FilterChainProxy 의 doFilter 메서드 중 원하는 곳에 break point를 겁니다. 스프링 시큐리티 디버깅을 위해 제일 처음 FilterChainProxy에 브레이크 포인트를 걸어서 확인하는 이유는 Spring Security를 사용하면 서블릿 필터는 FilterChainProxy라는 스프링 빈에 필터를 위임합니다. 즉.. 2023. 3. 30. 스프링 시큐리티 DelegatingFilterProxy, FilterChainProxy 스프링 시큐리티에 아키텍쳐에 대해 하나씩 알아보고자 합니다. 처음은 DelegatingFilterProxy, FilterChainProxy로 서블릿 컨테이너와 스프링 컨테이너의 분리로 인해 발생하는 아키텍쳐에 대해 알아보려 합니다. 기반 지식 먼저 서블릿 컨테이너와 스프링 컨테이너를 도식화한 모습은 아래와 같습니다. [출처: mangkyu.tistory.com/18] web context는 서블릿 컨테이너가 포함된 부분으로 톰캣같은 WAS서버가 담당합니다. 인증/인가에 대한 다양한 요구사항 처리 서블릿 필터는 서블릿 스펙에 정의된 기술로 서블릿 컨테이너에서 생성되고 실행되는 객체입니다. 그러므로 스프링 컨테이너에 접근해서 스프링 빈(Bean)을 주입해서 사용할 수가 없습니다. 하지만 인증/인가에 대한 다.. 2023. 2. 15. @GeneratedValue 기본키 전략 4가지 DB에 따라 기본키 생성 전략의 디폴트 값이 달라지기 때문에 MySQL을 기준으로 구현한면, 원하는 전략을 명시적으로 코드로 남겨두시길 추천한다. 결론 : AUTO 전략이 DB마다 다르게 채택되고, Mysql에서는 sequence가 따로 없기 때문에 table 전략이 결국 사용됨을 알았습니다. 조사하면서 table 전략은 사용 이유가 확실할 때만 사용하는 것이 좋을 것 같다고 생각했는데요. 지금의 경우 PK가 숫자로만 구성된다면 굳이 table로 PK가 관리되지 않아도 될 거라 판단합니다. @GeneratedValue 로 기본키 전략 4가지 1. IDENTITY 전략 사용법 : @GeneratedValue(strategy = GenerationType.IDENTITY) DB의 AUTO_INCREMENT를.. 2022. 6. 5. @Embeddable 사용 이유와 장점 @Embeddable 사용한 이유와 장점 관련성이 있는 값들을 의미 있는 객체로 묶어서 관리하면서 객체의 응집도가 높아지는 효과를 기대하고 사용. 공유할 수 있는 객체 이면서 변경할 수 없도록(불변) 사용가능한 것이 @Embedded 타입의 장점이라고 생각합니다. import javax.persistence.Embeddable; @Embeddable public class Address { private String country; private String city; private String gu; } 2022. 6. 4. JPA 엔티티 양방향 참조에 대한 생각 JPA 엔티티 양방향 참조에 대한 생각 양방향 참조에 대한 질문 양방향 참조를 걸어주신 이유가 있을까요? 양방향 참조를 걸어줄 필요가 없다면, 단방향 참조를 활용하시는 것이 좋습니다. 왜 그럴까요? 단방향 참조 외에 양방향 참조를 굳이 써야 할 경우가 있다면, 언제일까요? 엔티티 참조에 대한 내 생각 먼저 양방향 참조로 엔티티를 모두 작성하고 개발하였다. 이유는 모든 연관관계를 양방향으로 우선 두고, 기능을 개발하면서 하나씩 고민해나가는 방향으로 잡아가기로 했었기 때문이다. 일단 DB 기반으로 관계가 있을수 있다는 것을 표시하고 개발해 나가면서 해당 관계의 필요유무를 고민해 나가려고 했던 것이었다. 그러면서 참고자료의 내용을 읽어보면서 단방향 참조를 활용하는 것이 좋은 이유를 생각해보면, 올바르게 모델링.. 2022. 6. 4. 스프링부트 버젼 - 마이너 버전 'org.springframework.boot' version '2.7.0' 끝이 0으로 끝나는 버젼은 마이너 버전이라고 한다. 마이너 버전은 사용 추천하지 않는다. 2022. 6. 1. WebMvcConfigurer org.springframework.web.servlet.config.annotation.WebMvcConfigurer WebMvcConfigurer 스프링프레임워크에서 제공하는 config 관련 interface이다. 구현클래스 WebMvcConfigurerAdapter deprecate 되었다. 이유 알아보기 공부했던 이유 메세지 컨버터, objecMappter에 대해 알아보고 싶었다. API request, response 속성들의 데이터 타입이라던지, 속성의 맵핑 시, 잘 되지 않았을 때 무엇을 봐야 하고 해결을 해나가기 위해 공부하고 싶었다. 공부해보니 스프링의 동작원리를 알아야 했으며 그래서 키워드로 검색해 이해하기엔 한계가 있었다. 그래도 토비의 스프링은 설명이 워낙 자세해서 제일 유용한 자.. 2022. 4. 18. [토비의스프링] 1-7 의존관계 주입 DI IoC가 매우 느슨하게정의돼서 폭넓게 사용되는 용어라는 점에서 스프링이 제공하는 IoC 방식을 핵심을 짚어주는 의존관계 주입Dependency Injection이라는, 의도가 명확히 드러나는 이름을 사용하기 시작했다. 먼저 의존관계란 무엇인지 생각해보자. 두 개의 클래스 또는 모듈이 의존관계에 있다고 말할 때는 항상 방향성을 부여해줘야 한다. A -> B (A가 B에 의존하고 있다) UML에서 말하는 의존관계란 이렇게 설계 모델의 관점에서 이야기하는 것이다. 런타임 시에 오브젝트 사이에서 만들어지는 의존관계도 있다. 프로그램이 시작되고 UserDao 오브젝트가 만들어지고 나서 런타임 시에 의존관계를 맺는 대상, 즉 실제 사용대상인 오브젝트를 의존 오브젝트dependent object라고 말한다. 런타임 .. 2022. 3. 30. [토비의스프링] 1-6 싱글톤 레지스트리와 오브젝트 스코프 싱글톤 레지스트리와 오브젝트 스코프 싱글톤 레지스트리 애플리케이션 컨텍스트는 우리가 만들었던 오브젝트 팩토리와 비슷한 방식으로 동작하는 loC 컨테이너다. 그러면서 동시에 이 애플리케이션 컨텍스트는 싱글톤을 저장하고 관리하는 싱글톤 레지스트리singleton registry이기도 하다. 디자인 패턴에서 나오는 싱글톤 패턴과 비슷한 개념이지만 그 구현 방법은 확연히 다르다. (영한님 강의 ApplicationContext로 테스트 하는 것이 나왔다고 한다.) 스펙에서 강제하진 않지만, 서블릿은 대부분 멀티스레드 환경에서 싱글톤으로 동작한다. 애플리케이션 안에 제한된 수, 대개 한 개의 오브젝트만 만들어서 사용하는 것이 싱글톤 패턴의 원리다. 싱글톤패턴의 한계 private으로 바뀐 생성자는 외부에서 호출할.. 2022. 3. 30. [토비의스프링] 1-5 스프링의 IoC 스프링의 IoC 스프링의 핵심을 담당하는 건, 바로 빈 팩토리 또는 애플리케이션 컨텍스트라고 불리는 것이다. 스프링에서는 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리bean factory라고 부른다. 보통 빈 팩토리보다는 이를 좀 더 확장한 애플리케이션 컨텍스트application context를 주로 사용한다. 기존 DaoFactory 코드에는 설정정보, 예를 들어 어떤 클래스의 오브젝트를 생성하고 어디에서 사용하도록 연결해줄 것인가 등에 관한 정보가 평범한 자바 코드로 만들어져 있다. 애플리케이션 컨텍스트는 직접 이런 정보를 담고 있진 않다. 대신 별도로 설정정보를 담고 있는 무엇인가를 가져와 이를 활용하는 범용적인 IoC엔진 같은 것이라고 볼수 있다. 오브젝트 설정 방법 .. 2022. 3. 30. [토비의스프링] 1장 오브젝트와 의존관계 - DAO(1) 느낀점 스프링은 객체지향이다. 객체지향은 리팩토링을 위한 것 같다. 오늘 읽은 파트는 최범균님의 "객체지향과 디자인패턴" 책의 더 긴 버젼같다. 한 줄 요약 "스프링은 오브젝트를 어떻게 효과적으로 설계하고 구현하고, 사용하고, 이를 개선 해나갈 것인가에 대한 명쾌한 기준을 마련해준다." "리팩토링은 개발자가 직관적으로 수행할 수 있긴 하지만. 본격적으로 적용하려면 학습과 훈련 이 필요하다. 나쁜 냄새에는 어떤 종류가 있다" 내용 요약 DAO클래스의 문제점 DB에서 데이터를 가져오는 DAO클래스를 절차적으로 작성한 후 어떻게 테스트하고 어떻게 재사용할 것인지에 대해 다룬다. main()를 통한 테스트 : 처음에는 해당 DAO 클래스 내에서의 main()메서드에서 테스트하는 방법을 소개한다. 문제점 :mai.. 2022. 3. 16. 이전 1 2 다음