728x90
반응형

Spring 25

[Spring] 관습적인 추상화

문제 인식 대부분 프로젝트를 할 때 Service를 인터페이스로 만들고 ServiceImpl을 구현체 클래스로 만들게 됩니다. 이렇게 인터페이스와 클래스로 분리하는 이유는 구현체를 독립적으로 확장할 수 있으며, 구현체 클래스를 변경하거나 확장해도 클라이언트의 코드에 영향을 주지 않기 때문입니다. 또한 위와 같은 추상화 방식을 사용하여 구현하므로써 객체지향의 다섯가지 원칙 중 하나인 OCP원칙을 잘 지키는 설계 방식이라고 할 수 있습니다. [Spring] 객체 지향 설계의 다섯 가지 기본 원칙 - SOLID SOLID 다섯 가지 설계 원칙 단일 책임 원칙(SRP: Single Responsibility Principle) 한 클래스는 하나의 책임만 가져야 한다. 책임 영역이 확실해지고, 한 클래스의 변경이..

Spring 2022.08.09

[Refactoring] RequestBody Null or Empty 예외 처리

포스트맨으로 테스트 중 아래와 같은 오류 발생 Request로 요청하던 데이터 중 null값으로 잘못보내서 500에러가 발생하였습니다. 2022-07-26 14:53:24.937 ERROR 32748 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: eq(null) is not allowed. U..

Project/Todo 2022.07.27

[Spring Boot] Todo 서비스 구현 (3)

투두를 완료했을 때 다르게 표시하기 위해서 투두의 상태를 추가하였습니다. [TodoStatus.java] package hooyn.todo.domain; public enum TodoStatus { NOT_COMPLETE, ING, COMPLETE } [Todo.java] //필드 추가 //데이터베이스에 저장될 때 String으로 저장되게 하기 위해서 EnumType.String으로 설정하였습니다. @Enumerated(EnumType.STRING) private TodoStatus status; //생성 메서드에서 status NOT_COMPLETE 상태로 설정하였습니다. @Builder private Todo(String title, String content, Deadline deadline){ t..

Project/Todo 2022.07.18

[Refactoring] 관심사 분리를 통한 DIP 지키기

원래 코드 [기존 Member Service 코드 1] [Spring Boot] Member 서비스 구현 (1) domain/Member.java package hooyn.todo.domain; import lombok.*; import org.hibernate.annotations.GenericGenerator; import org.springframework.security.crypto.password.PasswordEncoder; import javax.pe.. lakelight.tistory.com [기존 Member Service 코드 2] 저장 이렇게 오버라이딩 해서 구현을 할 수 있습니다. */ public UUID save(Member member){ em.persist(member); r..

Project/Todo 2022.07.15

[Spring] 객체 지향 설계의 다섯 가지 기본 원칙 - SOLID

SOLID 다섯 가지 설계 원칙 단일 책임 원칙(SRP: Single Responsibility Principle) 한 클래스는 하나의 책임만 가져야 한다. 책임 영역이 확실해지고, 한 클래스의 변경이 다른 클래스의 영향을 미치지 않습니다. 그리고 책임을 적절하게 분배함으로써 코드의 가독성이 향상되고 유지보수가 용이하다는 장점이 있습니다. 개방-폐쇄 원칙(OCP: Open Close Principle) 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 소프트웨어 구성요소인 컴포넌트, 클래스, 모듈, 함수는 확장에는 열려있고, 변경에는 닫혀있어야 합니다. 이것은 변경을 위한 비용을 줄이고, 확장을 위한 비용은 극대화 해야한다는 의미입니다. 즉 요구사항이 변경되거나 추가사항이 발생하더라도 ..

Spring 2022.07.15

[Spring] @ComponentScan @Autowired 의존관계 자동 주입

@ComponentScan @Component 애노테이션이 붙은 클래스를 자동으로 스프링 빈으로 등록합니다. 해당 애노테이션이 붙어있는 클래스부터 하위로 탐색하면서 @ComponentScan의 대상을 찾습니다 그래서 @ComponentScan은 프로젝트가 실행되는 최상단에 두는 것이 좋습니다. 스프링에서는 애플리케이션이 실행되는 {프로젝트이름}Application클래스 @SpringBootApplication을 확인해보겠습니다. @SpringBootApplication 내부에 @ComponentScan이 있는 것을 확인 할 수 있습니다. 애플리케이션이 실행되면서 모든 @ComponentScan의 대상을 찾아서 빈으로 등록하고 @Autowired를 찾아 의존관계도 자동으로 주입해줍니다. @SpringBoo..

Spring 2022.07.12

[AWS EC2 ubuntu] MySQL 데이터베이스 구축, 스프링 배포 파일 빌드, 서버 데이터베이스를 이용한 Member API 테스트

AWS EC2 MySQL 데이터베이스 생성 이모티콘도 사용할 수 있는 데이터베이스 생성 mysql> CREATE DATABASE TODO_DB CHARACTER SET utf8mb4 collate utf8mb4_general_ci; 전체 데이터베이스 정보 조회 mysql> SELECT * FROM information_schema.schemata s; TODO_DB 데이터베이스의 default character_set_name과 collation_name 조회 mysql> SELECT default_character_set_name, DEFAULT_COLLATION_NAME FROM information_schema.SCHEMATA -> WHERE schema_name = "TODO_DB"; Member..

Project/Todo 2022.07.12

[AWS EC2 ubuntu] 서버 초기 설정, MySQL 설정

ubuntu 서버 초기 설정 ● 자바 17 설치 설치 가능한 패키지 리스트를 최신화합니다. sudo apt update && sudo apt upgrade -y PPA 가져오기 sudo add-apt-repository ppa:linuxuprising/java -y APT 저장소 업데이트 sudo apt update APT 패키지 관리자를 사용하여 자바 17 설치 sudo apt-get install oracle-java17-installer oracle-java17-set-default ※ Package Configuration 화면이 나오면 Tab 후 Enter - 자세한 화면과 설명 ※ 설치가 잘 되었는지 자바 버전을 확인합니다. java --version [설치 도중 오류 발생] >>> Sub-p..

Project/Todo 2022.07.12

[Spring] @Configuration과 Singleton By CGLIB

궁금증 MemberService 1번 / TodoService 1번 / MemberRepository 3번 호출 된다고 생각했습니다. 결론적으로 MemberRepository가 3번 호출 되어 싱글톤이 깨질 수도 있다고 생각했습니다. @Configuration public class AppConfig { //차례대로 클래스를 빈에 등록하여 싱글톤을 보장한다고 가정하겠습니다. @Bean //1. MemberService 호출 public MemberService memberService() { //2. MemberRepository 호출 return new MemberServiceImpl(memberRepository()); } @Bean 3. TodoService 호출 public TodoService ..

Spring 2022.07.11
728x90
반응형