본문 바로가기
728x90
반응형

전체 글394

[디자인패턴] 템플릿 메서드(Template Method) 패턴 이해하기 안녕하세요. J4J입니다. 이번 포스팅은 템플릿 메서드 (Template Method) 패턴에 대해 적어보는 시간을 가져보려고 합니다. Template Method 패턴이란? template method 패턴은 상위 클래스에서 공통으로 사용되는 템플릿을 제공하여 하위 클래스에서 구체적인 단계를 재 정의할 수 있도록 도와줍니다. template method의 기본 구조는 다음과 같습니다. 구조를 보시면 상위 클래스에서는 공통으로 재 사용될 수 있는 메서드 (= Template Method)를 제공하고 있습니다. 그리고 하위 클래스 별로 상세 로직을 정의할 수 있도록 추상 메서드 (= Primitive Method)를 제공하고 있습니다. 개인적으로 template method는 구조만 확인하더라도 어떤 목적.. 2024. 4. 22.
[디자인패턴] 팩토리 메서드(Factory Method) 패턴 이해하기 안녕하세요. J4J입니다. 이번 포스팅은 팩토리 메서드 (Factory Method) 패턴에 대해 적어보는 시간을 가져보려고 합니다. Factory Method 패턴이란? factory method 패턴은 객체 생성을 상위 클래스가 아닌 하위 클래스에서 생성하도록 도와주는 패턴으로 하위 클래스에 의해 어떤 객체가 생성될지 결정되는 디자인 패턴입니다. factory method 패턴을 이해하기 위해선 하위 클래스에서 어떻게 생성을 할 수 있는지를 파악해야 합니다. 일반적으로 특정 객체를 생성하려고 한다면 new 연산자를 이용하여 객체들을 생성할 것입니다. 그리고 서로 다른 객체이지만 동일한 클래스를 사용해야 되는 경우 자연스럽게 다음과 같은 코드가 작성될 것입니다. Product productA = new.. 2024. 4. 22.
[디자인패턴] 퍼사드(Facade) 패턴 이해하기 안녕하세요. J4J입니다. 이번 포스팅은 퍼사드(Facade) 패턴에 대해 적어보는 시간을 가져보려고 합니다. Facade 패턴이란? facade 패턴은 서비스에 존재하는 복잡한 구조의 서브 클래스들을 간략화하여 사용할 수 있도록 인터페이스를 제공해 주는 디자인 패턴입니다. 개념적인 부분으로 접근했을 때는 어떤 말인지 이해하기 어려울 수 있으나 facade 패턴에 대해 간단하게 얘기해보면 중간 다리 역할을 하는 객체를 생성하는 패턴이다라고 생각하시면 됩니다. facade 패턴의 구조에 대해서 그림으로 표현해보면 다음과 같습니다. facade 패턴을 사용하지 않는다면 기능을 사용해야 하는 client 입장에서는 다양한 서브 클래스들에 모두 접근해야 될 수 있습니다. 하지만 이런 client의 접근은 서비스.. 2024. 4. 1.
[디자인패턴] 싱글톤(Singleton) 패턴 이해하기 안녕하세요. J4J입니다. 이번 포스팅은 싱글톤(Singleton) 패턴에 대해 적어보는 시간을 가져보려고 합니다. Singleton 패턴이란? singleton 패턴은 객체를 생성할 때 클래스 별로 각 하나의 객체만 생성하여 사용될 수 있도록 도와주는 디자인 패턴입니다. 많은 분들이 경험해 보셨겠지만 개발을 할 때 클래스 내부에 정의되어 있는 기능을 사용하기 위해 다양한 곳에서 객체를 생성하게 됩니다. 그리고 생성된 객체를 이용하여 내부에 정의되어 있는 여러 메서드 및 함수들을 활용하게 됩니다. 하지만 여러 장소에서 각각 객체를 생성하는 행위는 모두 자원을 필요로 합니다. 객체가 생성될 때마다 각 객체의 정보들이 담겨야 하는 메모리 공간을 차지하기 때문입니다. 또한 다양한 곳에서 생성된 객체들은 모두 .. 2024. 3. 30.
[디자인패턴] 빌더(Builder) 패턴 이해하기 안녕하세요. J4J입니다. 이번 포스팅은 빌더(builder) 패턴에 대해 적어보는 시간을 가져보려고 합니다. Builder 패턴이란? builder 패턴은 객체 생성을 유연하게 할 수 있도록 도와주는 디자인 패턴 중 하나입니다. 자바 관점에서 확인했을 때 객체 생성을 할 때 보통 사용될 수 있는 것은 생성자를 활용하는 것입니다. 파라미터 정보가 하나도 들어있지 않은 default 생성자부터 원하는 파라미터 정보로 구성된 생성자까지 활용하여 객체를 생성할 수 있습니다. builder 패턴은 생성자와 유사하게 객체 생성을 도와주지만 생성하는 방법을 다양하게 구성해 볼 수 있습니다. 클래스 내부에 builder 패턴을 적용하기 위한 설정만 해둔다면 객체 인스턴스를 생성해야 되는 곳에서 메서드 체이닝을 활용하.. 2024. 3. 23.
[객체지향설계] SOLID 설계 원칙 (5) - DIP (의존성 역전 원칙) 안녕하세요. J4J입니다. 이번 포스팅은 solid 설계 원칙 마지막인 dip (의존성 역전 원칙)에 대해 적어보는 시간을 가져보려고 합니다. 이전 글 [객체지향설계] SOLID 설계 원칙 (1) - SRP (단일 책임 원칙) [객체지향설계] SOLID 설계 원칙 (2) - OCP (개방 폐쇄 원칙) [객체지향설계] SOLID 설계 원칙 (3) - LSP (리스코프 치환 원칙) [객체지향설계] SOLID 설계 원칙 (4) - ISP (인터페이스 분리 원칙) DIP (의존성 역전 원칙) 란? solid 설계 원칙에서 dip가 의미하는 것은 고수준 모듈은 저수준 모듈에 의존하지 않고 추상화에 의존해야 된다는 것을 말합니다. 여기서 고수준 모듈과 저수준 모듈은 무엇이며, 추상화에 의존해야 된다는 것은 또 무엇.. 2024. 3. 22.
[객체지향설계] SOLID 설계 원칙 (4) - ISP (인터페이스 분리 원칙) 안녕하세요. J4J입니다. 이번 포스팅은 solid 설계 원칙 네 번째인 isp (인터페이스 분리 원칙)에 대해 적어보는 시간을 가져보려고 합니다. 이전 글 [객체지향설계] SOLID 설계 원칙 (1) - SRP (단일 책임 원칙) [객체지향설계] SOLID 설계 원칙 (2) - OCP (개방 폐쇄 원칙) [객체지향설계] SOLID 설계 원칙 (3) - LSP (리스코프 치환 원칙) ISP (인터페이스 분리 원칙) 란? solid 설계 원칙에서 isp가 의미하는 것은 클라이언트는 자신의 목적에 맞는 메서드에만 의존해야 된다는 것을 말합니다. 즉, 자바 관점에서 얘기를 해보면 인터페이스를 활용하여 클래스 내부 메서드를 정의할 때 실제로 클래스 내부에서 사용되는 메서드만 담긴 인터페이스를 활용되어야 한다는 .. 2024. 3. 12.
[객체지향설계] SOLID 설계 원칙 (3) - LSP (리스코프 치환 원칙) 안녕하세요. J4J입니다. 이번 포스팅은 solid 설계 원칙 세 번째인 lsp (리스코프 치환 원칙)에 대해 적어보는 시간을 가져보려고 합니다. 이전 글 [객체지향설계] SOLID 설계 원칙 (1) - SRP (단일 책임 원칙) [객체지향설계] SOLID 설계 원칙 (2) - OCP (개방 폐쇄 원칙) LSP (리스코프 치환 원칙) 란? solid 설계 원칙에서 lsp가 의미하는 것은 자료형 A가 자료형 B의 서브 타입이라면 다른 수정 사항 없이 A를 B로 대체할 수 있어야 되는 것을 말합니다. 즉, 자바 관점에서 얘기를 해보면 A 클래스가 B의 클래스에 상속되어 있는 관계일 때 다른 소스 코드의 변경 없이 A를 B로 변경했을 때 동일한 동작을 수행해야 된다는 것입니다. 자바 관점에서 lsp는 결국 상.. 2024. 3. 9.
[객체지향설계] SOLID 설계 원칙 (2) - OCP (개방 폐쇄 원칙) 안녕하세요. J4J입니다. 이번 포스팅은 solid 설계 원칙 두 번째인 ocp (개방 폐쇄 원칙)에 대해 적어보는 시간을 가져보려고 합니다. 이전 글 [객체지향설계] SOLID 설계 원칙 (1) - SRP (단일 책임 원칙) OCP (개방 폐쇄 원칙) 란? solid 설계 원칙에서 ocp가 의미하는 것은 소프트웨어 확장에는 열려있어야 하지만 수정에는 닫혀있어야 하는 것을 말합니다. 여기서 확장에는 열려있다는 것과 수정에는 닫혀있다는 것의 의미를 파악해봐야 합니다. 먼저 확장에 열려있다는 것은 새로운 요구사항이 생겼을 때 요구사항에 맞는 새로운 기능을 추가할 수 있어야 한다는 것을 의미합니다. 예를 들어 캐릭터를 성장하는 게임에서 직업이 전사 / 마법사 / 도적이 있는데 새로운 직업인 궁수를 새롭게 만들.. 2024. 3. 4.
[객체지향설계] SOLID 설계 원칙 (1) - SRP (단일 책임 원칙) 안녕하세요. J4J입니다. 이번 포스팅은 solid 설계 원칙 첫 번째인 srp (단일 책임 원칙)에 대해 적어보는 시간을 가져보려고 합니다. SRP (단일 책임 원칙) 란? solid 설계 원칙에서 srp가 의미하는 것은 모든 클래스는 한 개의 책임만을 가지고 있어야 하는 것을 말합니다. 여기서 한 개의 책임이라고 하는 것에 대한 의미를 파악해봐야 합니다. 한 개의 책임을 가진다고 하는 것은 개발을 하면서 생성되는 다양한 모듈들이 존재할 텐데 해당 모듈들이 한 개의 액터만을 위한 기능이 이루어져야 한다는 것입니다. 여기서 말하는 액터는 일부 특정 사용자가 될 수도 있고 일부 특정 시스템이 될 수도 있습니다. 즉, 이 모든 사용자들 중 한 사용자 만을 위한 기능을 생산하는 방식이 srp라고 말해볼 수 있.. 2024. 3. 2.
[SpringBoot] Spring Security를 이용하여 인증/인가 처리하기 (3) - API와 JWT Token에 활용하기 안녕하세요. J4J입니다. 이번 포스팅은 spring security를 이용하여 인증/인가 처리하기 마지막인 api와 jwt token에 활용하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 이전 글 [SpringBoot] Spring Security를 이용하여 인증/인가 처리하기 (1) - 개념 및 기본 설정 [SpringBoot] Spring Security를 이용하여 인증/인가 처리하기 (2) - MVC와 Session에 활용하기 들어가기에 앞서 해당 글에서 사용되는 spring boot 버전은 다음과 같습니다. boot → 3.2.2 java → 17 JWT Token을 이용한 설정 이전 글들을 확인해 보면 spring security가 무엇인지와 security 인증 처리 방식 중 하나인 m.. 2024. 2. 22.
[SpringBoot] Spring Security를 이용하여 인증/인가 처리하기 (2) - MVC와 Session에 활용하기 안녕하세요. J4J입니다. 이번 포스팅은 spring security를 이용하여 인증/인가 처리하기 두 번째인 mvc와 session에 활용하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 이전 글 [SpringBoot] Spring Security를 이용하여 인증/인가 처리하기 (1) - 개념 및 기본 설정 들어가기에 앞서 해당 글에서 사용되는 spring boot 버전은 다음과 같습니다. boot → 3.2.2 java → 17 MVC와 Session을 이용한 설정 이전 글에서 spring security에 대한 설명과 사용되는 인증 처리 방식에 대한 소개를 드렸습니다. 그중 하나인 session을 이용하여 spring security를 적용하는 방법에 대해 작성해보려고 하며, session은 t.. 2024. 2. 15.
[SpringBoot] Spring Security를 이용하여 인증/인가 처리하기 (1) - 개념 및 기본 설정 안녕하세요. J4J입니다. 이번 포스팅은 spring security를 이용하여 인증/인가 처리하기 첫 번째인 개념 및 기본 설정에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 해당 글에서 사용되는 spring boot 버전은 다음과 같습니다. boot → 3.2.2 java → 17 인증이란? spring security에 대해 알기 전 가장 먼저 인증에 대한 개념을 알고 있어야 합니다. 인증이라고 하는 것은 서비스에 접근할 수 있는 사용자가 맞는지를 확인하는 과정입니다. 예를 들어, 학생이 학교 내부에 들어가는 것을 얘기해 볼 수 있습니다. 학교를 다니는 학생으로 등록되어 있기 때문에 학교 내부에 들어갈 수 있지만, 학생으로 등록되어 있지 않은 사람이 학교 내부로 들어갈 수는 없습니다. .. 2024. 2. 13.
[SpringBoot] properties에 담긴 환경 변수를 클래스로 사용하기 안녕하세요. J4J입니다. 이번 포스팅은 properties에 담긴 환경 변수를 클래스로 사용하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 들어가기에 앞서 환경 변수를 클래스로 사용할 수 있는 방법들이 버전 별로 다른 설정을 해줘야 합니다. 제가 테스트를 위해 사용한 버전은 다음과 같으니 글을 보실 때 참고해 주시길 바랍니다. boot 3.2.2 java 17 환경 변수 사용하는 기본적인 방법 spring에서 properties에 담긴 환경 변수를 사용하는 경우는 profile 관리 목적과 암호화 키 같이 외부에 노출되지 않는 변수를 사용하는 목적으로써 많이 활용되고 있을 겁니다. 그리고 환경 변수를 작성하는 파일은 보통 application.properties이거나 application.yml을.. 2024. 2. 8.
[SpringBoot] Layer별 테스트 코드 작성하기 (3) - Controller 테스트 안녕하세요. J4J입니다. 이번 포스팅은 Layer별 테스트 코드 작성하기 마지막인 Controller 테스트하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 관련 글 [SpringBoot] MockMVC를 이용하여 API 테스트하기 이전 글 [SpringBoot] Layer별 테스트 코드 작성하기 (1) - JPA를 이용한 Repository 테스트 [SpringBoot] Layer별 테스트 코드 작성하기 (2) - Service 테스트 Controller 단위 테스트 controller 쪽에서 작성해 볼 수 있는 테스트 방법 중 하나는 단위 테스트입니다. 단위 테스트는 이전 글에서 작성된 service 테스트에서 확인할 수 있는 것처럼 mock 객체를 활용한 테스트 방식이 될 수 있습니다. moc.. 2024. 2. 7.
[SpringBoot] Layer별 테스트 코드 작성하기 (2) - Service 테스트 안녕하세요. J4J입니다. 이번 포스팅은 Layer별 테스트 코드 작성하기 두 번째인 Service 테스트하는 방법에 대해 적어보는 시간을 가져보려고 합니다. 이전 글 [SpringBoot] Layer별 테스트 코드 작성하기 (1) - JPA를 이용한 Repository 테스트 Mock 객체와 Mockito service 로직과 관련된 테스트 코드를 작성하기 위해서는 먼저 mock에 대한 개념을 알고 있어야 합니다. 이전 글에서도 간단하게 얘기를 하기는 했지만 spring에서 테스트 코드를 작성하고 실행시킬 때 spring의 동작을 위한 모든 환경을 구성하는 상황이 발생되면 좋지 않습니다. 물론 통합 테스트와 같이 API의 전체 동작에 대한 흐름을 파악할 때는 당연히 구성이 되어야 하지만, 지금처럼 se.. 2024. 2. 4.
[SpringBoot] Layer별 테스트 코드 작성하기 (1) - JPA를 이용한 Repository 테스트 안녕하세요. J4J입니다. 이번 포스팅은 Layer별 테스트 코드 작성하는 방법 첫 번째인 JPA를 이용한 Repository 테스트하는 방법에 대해 적어보는 시간을 가져보려고 합니다. JpaRepository 테스트 JPA를 이용하는 환경에서 repository 테스트를 수행할 때 가장 대표적으로 해볼 수 있는 테스트는 JpaRepository 사용에 대한 테스트입니다. JpaRepository를 테스트하기 위해서는 jpa에서 제공해 주는 @DataJpaTest 어노테이션을 활용하면 되는데 해당 어노테이션 내부를 확인해 보면 다음과 같이 다양한 설정 값들이 들어 있는 것을 볼 수 있습니다. @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @.. 2024. 2. 3.
[SpringBoot] Spring Validation을 이용한 유효성 검증하기 안녕하세요. J4J입니다. 이번 포스팅은 spring validation을 이용한 유효성 검증하는 방법에 대해 적어보는 시간을 가져보려고 합니다. Spring Validation이란? spring validation은 spring에서 유효성 검증을 하기 위해 도와줍니다. 그리고 여기서 말하는 유효성 검증은 개발된 API의 구조에 맞게 request data가 올바르게 넘어왔는지, 특정 메서드를 호출할 때 사용되어야 하는 paramter 값들이 올바르게 전달되었는지 등을 확인하는 것을 의미합니다. 일반적으로 validation 적용은 controller에서 많이 활용됩니다. client로부터 전달받는 요청은 API 서버 관점에서 예상하지 못한 다양한 케이스가 존재할 수 있기 때문에 유효성 검증이 활발하게 .. 2024. 1. 29.
728x90
반응형