📚 Study

    [Spring] Validation

    [Spring] Validation

    ✔️ Validation 이란 Validation은 데이터의 유효성을 검사하는 것으로 Presentation Layer부터 Persistence Layer까지 모든 애플리케이션 계층에서 발생하는 공통 작업입니다. Spring Bean Validation은 Validator 인터페이스를 사용하여 직접 도메인 객체를 검증하는 방법을 표준화하고 어노테이션을 이용해 선언적으로 표현할 수 있도록 도와줍니다. 이에 대한 구현체로 Hibernate Validator가 있고 Spring Boot는 이 구현체를 기본적으로 지원합니다. 또한 Spring 3부터는 컨트롤러 메서드의 파라미터를 자동으로 검증하는 어노테이션인 @Valid를 제공하며 컨트롤러 메서드에서 검증하는 로직을 완전히 제거해 자동으로 검증할 수 있게 했습..

    [Spring] Entity, DTO, DAO, VO?

    [Spring] Entity, DTO, DAO, VO?

    ✔️ Entity Entity는 DB의 테이블에 존재하는 Column들을 필드로 가지는 객체를 말합니다. Entity는 DB의 테이블과 1대1로 대응되기 때문에 테이블이 가지지 않는 Column을 필드로 가져서는 안됩니다. 예를 들어 user라는 테이블이 name, email, password 라는 컬럼들을 가지고 있다면 @Entity public class User { private String name; private String email; private String password; } 이에 대응하는 Entity 클래스는 위와 같이 user 테이블의 Column들을 필드로 가져야 합니다. JPA를 사용할 때 Entity 클래스에는 @Entity 어노테이션을 붙여서 Entity임을 명시해줘야 하며 ..

    [Spring] JUnit을 통한 TDD

    [Spring] JUnit을 통한 TDD

    공부를 위한 목적으로 찾아보며 작성한 글이므로 잘못된 부분이 있을 수 있습니다. 추가해야 하거나 수정되어야 할 부분을 댓글로 알려주시면 다시 공부한 후 반영하도록 하겠습니다. ✔️ TDD(Test-Driven Development) 📌 TDD란 TDD는 Test-Driven Development 의 약자로 테스트 주도 개발이라고 하며 반복 테스트를 이용한 소프트웨어 개발 프로세스입니다. 우선 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트 케이스를 작성하고 해당 테스트를 통과하는 가장 간단한 코드를 작성합니다. 일단 테스트 통과하는 코드를 작성하고 상황에 맞게 리팩토링하는 과정을 거치는 것입니다. 짧은 개발 주기의 반복에 의존하는 개발 프로세스이며 애자일 방법론 중 하나인 eXtream Progra..

    [Spring] Spring Security + JWT

    [Spring] Spring Security + JWT

    ✔️ 인증(Authentication)과 인가(Authorization) 인증(Authentication)은 특정 리소스에 액세스하려는 사람의 신원을 확인하는 방법입니다. 사용자를 인증하는 일반적인 방법은 사용자에게 사용자 이름과 암호를 입력하도록 요구하는 것입니다. 인가(Authorization)는 인증을 마친 유저에게 권한(Authority)를 부여하여 대상 애플리케이션의 특정 리소스에 접근할 수 있게 허가하는 과정입니다. 인가는 반드시 인증 과정 이후 수행되어야 하며 권한은 Role 형태로 부여하는 것이 일반적입니다. ✔️ DelegatingFilterProxy 스프링 시큐리티는 주로 서블릿 필터와 이들로 구성된 필터체인을 사용하고 있습니다. 서블릿 필터는 WAS의 Servlet Container에..

    [JPA] 영속성 관리

    [JPA] 영속성 관리

    ✔️ 엔티티 매니저 팩토리와 엔티티 매니저 엔티티 매니저는 엔티티를 저장하고, 수정하고, 삭제하고, 조회하는 등 엔티티와 관련된 모든 일을 처리한다. 이름 그대로 엔티티를 관리하는 관리자다. 개발자 입장에서 엔티티 매니저는 엔티티를 저장하는 가상의 데이터베이스로 생각하면 된다. EntityManagerFactory 생성 코드 EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpabook") EntityMangerFactory를 생성하기 위해선 아래의 persistence.xml 의 설정 정보가 필요하다. META-INF/persistence.xml 이제 필요할 때마다 EntityManager를 생성해 사용할 수 있다. EntityMa..

    [JPA] JPA의 소개와 사용법

    [JPA] JPA의 소개와 사용법

    ✔️ 01. JPA 소개 JPA는 자바 진영에서 만든 ORM 기술 표준이다. 그리고 스프링 진영에서도 스프링 프레임워크 자체는 물론이고 스프링 데이터 JPA라는 기술로 JPA를 적극적으로 지원한다. 또한 전자정부 표준 프레임워크의 ORM 기술도 JPA를 사용한다. 관계형 데이터베이스는 가장 대중적이고 신뢰 할만한 안전한 데이터 저장소이다. 데이터베이스에 데이터를 관리하려면 SQL을 사용해야 하는데 자바로 작성한 애플리케이션은 JDBC API를 사용해서 SQL을 데이터베이스에 전달한다. public class MemberDAO { public void save(Member member) { String sql = "INSERT INTO MEMBER(MEMBER_ID, NAME) VALUES(?, ?)"; ..

    [Spring] Swagger? Spring REST Docs?

    [Spring] Swagger? Spring REST Docs?

    ✔️ Swagger Swagger는 Open Api Specification(OAS)를 위한 프레임워크이며 REST API 개발자 도구로 설계 및 문서화를 위해 API Spec을 관리하기 위한 프로젝트입니다. OAS는 RESTful 웹서비스를 약속된 규칙에 따라 API 스펙을 JSON과 YAML 형식으로 표현합니다. 이를 통해, 직접 소스코드를 보거나 추가 문서 필요없이 서비스를 이해할 수 있습니다. Swagger는 API들이 가지고 있는 Spec을 관리할 수 있습니다. 협업을 진행하거나 이미 만들어져 있는 프로젝트에 대해 유지보수를 진행하게 되면 구축되어 있는 API 서버가 어떤 스펙을 가지고 있는지 파악해야 하는데 이러한 스펙을 정리하기 위해 API 문서화 작업을 하게 되고, 이 과정을 직접 손으로 ..

    [Thymeleaf] 메시지, 변수, 객체

    [Thymeleaf] 메시지, 변수, 객체

    ✔️ 메시지 Welcome to our grocery store! #{...} 라는 메시지 표현식을 사용하면 태그에 내용을 우리가 원하는 내용으로 대체할 수 있다. home.welcome=¡Bienvenido a nuestra tienda de comestibles! home.welcome 에 대한 메시지는 properties 파일을 통해 관리된다. Welcome to our grocery store, Sebastian Pepper! home.welcome=¡Bienvenido a nuestra tienda de comestibles, {0}! 만약 원하는 내용을 동적으로 처리하고 싶다면 ${...} 변수 표현식을 사용하면 된다. 📌 th:text 와 th:utext home.welcome=Welcome..

    [Thymeleaf] 표준 표현식 구문

    [Thymeleaf] 표준 표현식 구문

    ✔️ Thymeleaf 란? 모던 서버 사이드 자바 템플릿 엔진 백엔드 서버에서 HTML을 동적으로 렌더링하는 용도로 사용된다. 네츄럴 템플릿 순수 HTML을 최대한 유지한다. 웹 브라우저로 파일을 직접 열어도 내용을 확인할 수 있고, 서버를 통해 뷰 템플릿을 거치면 동적으로 변경된 결과를 확인할 수 있다. JSP를 포함한 다른 뷰 템플릿들은 파일을 직접 열면 정상적인 HTML 결과를 확인할 수 없다. 스프링 통합 지원 스프링의 SpringEL 문법 통합 스프링 빈 호출 지원 ${@myBean.doSomething()} 편리한 폼 관리를 위한 추가 속성 th:object (기능 강화, 폼 커맨드 객체 선택), th:field, th:errors, th:errorclass 폼 컴포넌트 기능 checkbox..

    [MySQL] 사용자 권한

    [MySQL] 사용자 권한

    ✔️ 사용자 권한 사용자 권한은 테이블뿐만 아니라 컬럼, 뷰에 대한 권한을 부여할 수도 있습니다. 📌 MySQL 서버 & DB 접속 -- MySQL 서버 접속 mysql.server start -- root 계정 접속 $ mysql -u root -p 📌 사용자 계정 확인 -- root 데이터베이스 중 mysql 데이터베이스 선택i USE mysql; -- user 테이블 정보에서 사용자 계정 확인 SELECT host, user FROM user; 📌 사용자 계정 생성 -- 아이디만 생성 CREATE user [아이디]; -- 아이디, 비밀번호, host 생성 CREATE user [아이디]@[호스트] identified by '[비밀번호]'; -- localhost 계정에 외부 host 접근 권한 추..

    [MySQL] TRANSACTION

    [MySQL] TRANSACTION

    ✔️ TRANSACTION 더 이상 분할이 불가능한 업무처리의 단위. 즉, 한꺼번에 수행되어야 할 일련의 연산모음을 의미합니다. 작업의 안전성을 확보하기 위해 트랜잭션 내의 모든 명령은 성공하거나 실패해야합니다. (원자성) 트랜잭션 기능은 엔진의 영향을 받기 때문에 InnoDB를 사용해야 트랜잭션을 사용할 수 있습니다. -- 트랜잭션 시작 START TRANSACTION; -- 작업 SELECT ~; INSERT INTO ~; SELECT ~; -- 커밋 혹은 롤백 COMMIT or ROLLBACK 📌 트랜잭션 특징 원자성(Atomicity) 트랜잭션이 데이터베이스에 모두 반영되던가 전혀 반영되지 않아야 한다는 것입니다. 일관성(Consistency) 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한..

    [MySQL] INDEX

    [MySQL] INDEX

    ✔️ INDEX 테이블에서 원하는 많은 양의 데이터를 쉽고 빠르게 찾기 위해 사용합니다. 지정한 컬럼들을 기준으로 메모리 영역에 일종의 목차를 생성하는 것입니다. INSERT, UPDATE, DELETE의 성능을 희생하고 SELECT의 성능을 향상시킵니다. (UPDATE, DELETE를 하기 위해 데이터를 조회할 땐 인덱스를 통해 빠르게 처리됩니다.) 📌 INDEX를 사용하는 이유 SQL문을 변경하지 않고 성능을 개선할 수 있습니다. 테이블의 데이터에 영향을 주지 않습니다. 📌 INDEX를 만드는 기준 조회 시 자주 사용하는 크기가 큰 테이블만 만듭니다. 크기가 작은 테이블은 큰 차이가 없습니다. PRIMARY KEY나 UNIQUE 제약조건이 부여된 컬럼에는 불필요합니다. PK나 UNIQUE가 설정된 컬..