본문 바로가기

Spring Boot

(22)
스프링 시큐리티를 이용한 회원가입 📌Intro 스프링 부트를 이용한 로그인, 회원가입 기능은 크게 두가지 방법으로 구현할 수 있다. WebMvcConfigurer를 구현하는 WebMvcConfig 스프링 시큐리티를 사용하는 @EnableWebSecurity SecurityConfig 이 글에서는 후자의 방법으로 로그인, 회원가입을 구현해보고자 한다. 📌 스프링 시큐리티란? 스프링 시큐리티는 인증과 권한을 담당하는 프레임 워크이다. 복잡하지 말고 '인증'과 '권한'만 생각하자. 인증(Authenticate)은 로그인을 의미한다. 권한(Authorize)은 인증된 사용자가 어떤 것을 할 수 있는지를 의미한다. 📌 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-secu..
[SpringBoot] 6.2-5 ORM, JPA, Hibernate, 영속성 컨텍스트 Summary : ORM(JPA)를 통해서 데이터베이스를 객체 접근하듯 할 수 있음 / Hibernate는 JPA의 구현체 JPA의 원리 : EntityManagerFactory가 EntityManager를 생성하면, 이 EntityManager가 엔티티를 영속성 컨택스트에 올리고, 영속성 컨택스트와 DB를 비교하며 DB를 조작함 💡 6.2 ORM Object Relational Mapping의 약자 직역하자면 '객체 관계 매핑' java의 객체(entity)와 table을 자동으로 매핑하는 방법 쿼리문이 아니라 메서드로 데이터를 조작할 수 있음 우리는 자바의 ORM인 JPA를 사용할 것이므로 이후의 내용이 모두 JPA에도 적용된다고 생각하면 됨 📌 ORM의 장점 쿼리를 작성하는 양이 현저히 줄어 개발 ..
트랜잭션의 개념과 @Transacional 어노테이션 📌 트랜잭션 트랜잭션이란, 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위 트랜젝션을 기반으로 작업을 하면 불완전한 데이터에 의해 DB가 더렵혀지지 않는다는 것을 보장할 수 있음 📌 트랜젝션의 네가지 속성 : ACID 원자성(Atimicity) - 완전히 되거나, 하나도 되지 않거나 / all or nothing 일관성(Cinsistency) - DB의 상태는 항상 일관적이여야 함 / 트랜젝션이 완료되었을 때 DB는 여전히 제약을 만족해야 함 독립성(Isolation) - 모든 트랜잭션은 다른 트랜젝션으로부터 독립되어야 함 (e.g. 서로 간섭할 수 없음) 지속성(Durability) - 트랜젝션이 성공적으로 끝나면, 그 결과가 반영, 저장되어야 함 📌 트랜젝션의 결과 트랜젝션 연산의 결과는 두..
객체 지향 프로그래밍을 해야하는 이유와 SOLID 원칙 우리가 객체 지향 프로그래밍을 해야하는 이유는 뭘까요? 바로 소프트웨어를 '잘 관리'하기 위해서입니다. 소프트웨어와 하드웨어의 가장 큰 특징은 '소프트하다' 즉, 변화한다는 것이라 생각합니다. 시중에 나와있는 서비스를 보더라도 끊임업이 업데이트가 이루어지고 있습니다. 이 과정에서 기존 코드가 제대로 정리되어있지 않다면, 스파게티같은 코드를 뜯어고치느라 많은 비용이 들 수 있습니다. 이렇듯 소프트웨어에서는 기능을 만드는 것 만큼이나 유지 보수가 중요한데요, 객체 지향 프로그래밍을 통해서 유지보수를 간단하게 할 수 있기 때문에 객제 지향적으로 코드를 짜는게 중요합니다. 특히 소프트웨어를 유지보수하기 위해서는 분류와 교체가 필수적입니다. 분류는 비슷한 기능을 하는 것끼리 묶는 것인데, 이를 객체를 통해 할 수..
[SpringBoot] 5.6-7 Swagger와 Logback Summary : Swagger은 xxxx인 API 문서 작성툴 Logback은 xxxx 하게 하는 로그 출력 형식 🔍 목차 5.6 REST API 명세를 문서화하는 방법 : Swagger 5.7 로깅 라이브러리 : Logback 📌 5.6 REST API 명세를 문서화하는 방법 : Swagger API 명세란? API를 개발하면 명세를 관리해야 함 명세란 해당 API가 1) 어떤 로직을 수행하는지 2) 이 로직을 수행하기 위해 어떤 값을 요청하는지 3) 이에 따른 응답값으로는 무엇을 받을 수 있는지 를 정리한 자료 API는 개발 과정에서 계속 변경되므로 작성한 명세 문서도 주기적인 업데이트가 필요함 하지만 명세 작업은 번거롭고, 어플리케이션과 명세가 일치하지 않는 문제가 발생할 수도 있음 이 같은 문제..
[SpringBoot] 5.3-5 POST, PUT, DELETE API 만들기 Summary : POST API는 DB에 값을 저장하기 위해, PUT API는 DB에 있는 값을 수정하기 위해 사용함 두 API 모두 Http body에 json을 넣어 값을 전달함 DELETE API는 DB에 있는 값을 삭제하기 위해 사용함 리소스를 식별할 수 있는 간단한 정보만 있어도 되므로 URI로 값을 전달함 🔍 목차 5.3 POST API 만들기 5.3.1 @RequestMapping으로 구현하기 5.3.2 @RequestBody를 활용한 POST 메서드 구현 5.4 PUT API 만들기 5.4.1 @RequestBody를 활용한 PUT 메서드 구현 5.4.2 ResponseEntity를 활용한 PUT 메서드 구현 5.5 DELETE API 만들기 5.5.1 @PathVariable과 @Req..
[SpringBoot] 5.2 GET API 만들기 Summary : GET API는 서버에서 값을 가져올 때 사용하고, PathVariable과 ReqestParam을 이용해서 값을 넘겨줄 수 있다. 🔍 목차 5.2 GET API 만들기 5.2.1 @RequestMapping 5.2.2 매개변수가 없는 GET 메서드 5.2.3 @PathVariable을 이용하는 GET 메서드 5.2.4 @RequestParam을 이용하는 GET 메서드 5.2.5 DTO 객체를 이용하는 GET 메서드 📌 5.2 GET API 만들기 GET API는 서버에서 값을 가져올 때 사용하는 API GET API를 작성하는 방법은 아래와 같다. 1. 매개변수 없이 2. @PathVariable 3. @RequestParam 📌 5.2.1 @RequestMapping @Request..
[SpringBoot] 2.4-5 디자인 패턴, REST API > Summary 디자인 패턴 : 반복되는 유사한 문제에 대한 해결법을 패턴화 한 것 REST API : REST 구조(URI, HTTP method, JSON)로 데이터를 교환할 수 있게 설계된 API 🔍 목차 02 개발에 앞서 알면 좋은 기초 지식 2.4 디자인 패턴 2.5 REST API 💡 2.4 디자인 패턴 애플리케이션 개발에서는 비슷한 문제들이 발생하고, 해결책도 유사한 경우가 많음 -> 패턴화 가능 디자인 패턴는 이런 '유사하면서 반복적으로 일어나는' 문제들을 해결하기 위해 고안된 해결책 상황에 맞는 최적의 디자인 패턴을 결정해서 사용하는 것이 바람직함 디자인 패턴은 우리가 자주 사용하는 라이브러리에도 다양하게 쓰이고 있음 📌 2.4.1 디자인 패턴의 종류 디자인 패턴의 대표적인 분류 방식 ..