[Spring] Enum에 i18n 적용하는 방법
·
Framework/Spring
부트캠프 과제 中 트러블슈팅 과정 작성 글일정 관리 앱 서버 ver.2  ※ 이용 방법만 필요하면 목차에서 [구현 과정] 클릭    💡트러블 슈팅 1. 문제Exception을 처리할 Enum을 만들 때 message_ko와 message_en을 한번에 같이 전달하고 있었다.USER_NOT_FOUND(HttpStatus.NOT_FOUND,"해당 id를 찾을 수 없습니다.", "The ID cannot be found.")   2. 원인다국어처리를 지원하는 i18n에 대해서 이야기를 들었고, 이 방법을 이용하면 사용자가 설정한 언어에 따라서 그에 맞는 메세지가 전달할 수 있다는 방법을 알았다. 이 방법을 이용하기 위해서 i18n에 대해서 알아보았지만, Enum에서 이 값을 전달하기 위해서는 추가 설정이 필..
[Spring] Global Exception Handler에서 Enum 사용하기
·
Framework/Spring
부트캠프 과제 中 트러블슈팅 과정 작성 글일정 관리 앱 서버 ver.2  ※ 이용 방법만 필요하면 목차에서 [구현 과정] 클릭    💡트러블 슈팅 1. 문제상황마다 Exception을 만들고, Global Exception Handler를 사용하다 Exception Class를 여러 개 만들어야 하는 문제가 생겼다. 상황에 맞는 정확한 이름이 담긴 Exception을 만드는 것이 좋지만, 대부분 접근 권한이나 path입력, null입력 등 유효성 문제에 대한 예외 처리였기 때문에 그 의도는 모두 같았다. 발생되는 원인만 다른 것 뿐. 2. 원인문제가 발생될 시점에서 if로 확인하고, throw new로 상황에 맞는 Exception을 만들어 발생시키고 있었지만, 최종 응답은 같은 모양이었다. 응답에 필..
[Spring] 의존 관계 주입(DI) & 의존 관계 검색(DL)
·
Framework/Spring
의존 관계 Dependency스프링은 의존관계 주입 컨테이너, DI컨테이너라고도 불린다. 여기서 말하는 의존관계 즉, 의존성은 한 객체가 다른 객체에 의존하고 있다는 의미를 가지고 있다. 객체 지향 프로그래밍에서는 다른 객체를 사용하기 위해 호출을 할 때, 파라미터를 이용해 메세지를 주고 받거나, 객체를 직접 가져오기도 한다. 이 모두 의존관계가 형성되어 있는 것이다.의존성은 컴파일 의존성과 런타임 의존성으로 나뉘게 된다.  컴파일 의존성 Compile Dependency (정적 의존성, Static Dependency) 컴파일은 소스코드가 기계어로 변환하는 시점으로, 컴파일타임 의존성은 컴파일러가 직접 관리하여 코드를 통해 의존성을 확인한다. 코드 자체에서 어떤 객체를 참고할지 결정하고 있기 때문에 정..
[Spring] 싱글톤 레지스트리(Singleton Registry)란?
·
Framework/Spring
싱글톤 패턴일반적으로 객체를 여러번 생성하면 그 객체가 가지고 있는 정보는 같지만, 객체 자체는 모두 다른 객체이다.완전히 같은 오브젝트는 동일하다고 하고, 동일한 정보를 가지고 있는 건 동등하다고 한다.하지만 스프링에서는 여러번 빈을 요청해도 매번 동일한 오브젝트를 돌려준다.이는 스프링이 싱글톤을 적용하고 있기 때문이다.2024.12.06 - [Knowledge/디자인패턴] - [디자인 패턴] 싱글톤 패턴(Singleton Pattern) 싱글톤은 이와 같이 유일한 인스턴스를 사용해 메모리를 절약하고, 이미 생성된 인스턴스에 접근해 속도가 빠르다는 장점이 있다. 하지만 싱글톤의 사용은 위 글에서처럼 장점보다 큰 단점을 가지고 있다. private로 생성되어 객체 지향의 특징인 다형성 적용이 불가능하고,..
[토비의스프링] 1.5 스프링의 IoC
·
Framework/Spring
스프링의 핵심스프링의 핵심은 빈 팩토리, 애플리케이션 컨텍스트 라고 불리는 것에서 담당한다. 빈 Bean스프링이 제어권을 가지고 직접 만들고, 관계를 부여하는 오브젝트오브젝트 단위의 애플리케이션 컴포넌트스프링 컨테이너가 생성과 관계 설정, 사용 등을 제어하는 제어의 역전이 적용된 오브젝트 빈 팩토리와 애플리케이션 컨텍스트빈 팩토리빈의 생성과 관계 설정 같은 제어 담당 IoC오브젝트. 보통 빈 팩토리보다 애플리케이션 컨텍스트를 주로 사용한다.애플리케이션 컨텍스트IoC방식을 따라 만들어진 빈 팩토리. 빈 생성, 관계 설정 등 제어 작업 총괄빈 팩토리는 빈을 생성하고 관계를 설정하는 IoC기본 기능을 가지고 있다면, 애플리케이션 컨텍스트는 이 빈 팩토리의 확장형으로, 빈 팩토리의 모든 기능을 포함하여 추가 기..
[토비의스프링] 1.4 제어의 역전(IoC)
·
Framework/Spring
[1.3 DAO의 확장] 마지막 단계에서 만든 UserDaoTest는 클라이언트 역할을 하는 클래스로 생성하였다.다른 책임이나 관심사를 독립적으로 분리시키며서 DAO를 만들어왔지만, 결국 클라이언트 역할을 하는 이 테스트 클래스에서 '어떤 DB커넥션을 가져올지 결정하는 책임'을 맡게 되었다.  다시 이 클라이언트를 분리시키는 작업을 해보겠다. 여기서 팩토리(Factory)라는 개념이 등장한다. 팩토리(Factory)객체의 생성 방법을 결정하고, 객체를 돌려주는 역할을 한다.오브젝트를 생성하는 것과, 생성된 오브젝트를 사용하는 것을 분리하기 위한 목적으로 사용한다. 클라이언트 UserDaoTest 속 UserDAO, ConnectionMaker의 생성과정을 새로운 팩토리로 옮기고,클라이언트에서 팩토리에서 ..
[토비의스프링] 1.3 DAO의 확장
·
Framework/Spring
[1.2 DAO의 분리]에서는 DB 커넥션을 가져오는 코드를 메소드로 따로 분리하였고, 이 메소드를 추상메소드로 만들어 UserDAO를 다른 사용자가 상속받아 사용할 수 있게 하였다. 상속을 통해서 만들면 다중 상속 문제가 발생할 수 있으며, 슈퍼클래스에 제약을 걸어야 하는 필요성이 생기거나, 메소드가 매 클래스마다 중복 생성이 되는 단점이 있다. '상속'을 통해 생기는 문제점으로 상속을 하지 않으면 해결되지 않을까?추상 메소드로 분리해둔 DB커넥션을 독립적인 클래스로 만들어 나누어 보겠다.  package springbook.user.dao;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;publi..
[토비의스프링] 1.2 DAO의 분리
·
Framework/Spring
1.1 에 작성한 DAO는 초난감 코드로 동작은 제대로 작동하지만 효율적인 코드는 아니다.add()와 get()에서 모두 Connection을 가져오는 중복된 코드가 존재한다.일단 이 중복된 코드를 따로 구현하여 Connection을 동작하는 getConnection 메소드를 생성할 수 있다. public void add(User user) throws ClassNotFoundException, SQLException{ Connection c = getConnection(); ... } public User get(String id) throws ClassNotFoundException, SQLException{ Connection c = getConnection()..
[토비의스프링] 1.1 초난감 DAO
·
Framework/Spring
[토비의스프링 3.1] 첫 단계 '1.1 초난감 DAO'를 통해 DAO의 의미와 간단한 이용법을 알아보았다.DAO는 Database Access Obejct로 말 그대로 데이터베이스를 조작하거나 조회하는 기능의 오브젝트이다.데이터베이스의 가장 기본적인 CRUD를 이 DAO를 통해 조작한다.CRUD는 Create, Read, Update, Delete로 데이터를 생성, 사용, 수정, 삭제 동작의 약자이다. 본 코드를 실습해보기 전 JDBC가 동작하기 위해 사용하는 클래스는 아래와 같다.Connection: 데이터베이스 연결Statement · PreparedStatement: SQL 쿼리문을 담아서 실행ResultSet: 실행 결과를 옮겨 오브젝트에 저장  MySQL에서 테이블을 생성한다.CREATE DA..