본문 바로가기

전체 글

(155)
[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 원칙 우리가 객체 지향 프로그래밍을 해야하는 이유는 뭘까요? 바로 소프트웨어를 '잘 관리'하기 위해서입니다. 소프트웨어와 하드웨어의 가장 큰 특징은 '소프트하다' 즉, 변화한다는 것이라 생각합니다. 시중에 나와있는 서비스를 보더라도 끊임업이 업데이트가 이루어지고 있습니다. 이 과정에서 기존 코드가 제대로 정리되어있지 않다면, 스파게티같은 코드를 뜯어고치느라 많은 비용이 들 수 있습니다. 이렇듯 소프트웨어에서는 기능을 만드는 것 만큼이나 유지 보수가 중요한데요, 객체 지향 프로그래밍을 통해서 유지보수를 간단하게 할 수 있기 때문에 객제 지향적으로 코드를 짜는게 중요합니다. 특히 소프트웨어를 유지보수하기 위해서는 분류와 교체가 필수적입니다. 분류는 비슷한 기능을 하는 것끼리 묶는 것인데, 이를 객체를 통해 할 수..
[회고] 2023년 7월 회고록 Intro. 이번 글은 평소처럼 '~다' 형식이 아니라, 글을 보시는 분들께 이야기하듯이 '~합니다.'체로 써보려 합니다. 사실 7월 회고를 하기에는 다소 늦은 감이 있는 것 같습니다. 글을 쓰는 지금이 8월 8일이니 말이지요. 하지만 진행하고 있던 프로젝트의 흐름이 끊기는 게 싫어서 이제야 쓰게 되었습니다. 그럼 '7월 한 달 동안 무엇을 하고, 무엇을 배웠는가' 그리고 '8월을 살아가기 위해서 무엇이 필요한가'에 대해 적어보겠습니다. ✒️ 약속 거부 선언 6월 말, 종강을 하고 미뤄뒀던 약속들이 정말로 미친듯이 잡히기 시작했습니다. 심지어 저의 지인들은 '인천 지인', '서울 지인'으로 나눠지는데요. 한번 인천-서울-인천을 하는데에 왕복 4시간이 걸리기 때문에 공부할 체력이 남아나질 않았습니다. 그래..
[Spring Security] 로그인 후 로직을 successHandler로 구현하기 요구 사항 사용자가 로그인했을 때, 로그인 히스토리를 login-history에 저장하고, 이를 관리자만 조회할 수 있게 하고 싶다. 그러려면, 로그인에 성공했을 때 동작할 핸들러를 만들어줘야 한다! 1. AuthenticationSuccessHandler를 상속하는 클래스 만들기 성공했을 때의 로직을 담을 클래스를 만들고 이 클래스가 SimpleUrlAuthenticationSuccessHandler을 상속하게 해야한다. (SimpleUrlAuthenticationSuccessHandler가 AuthenticationSuccessHandler를 상속하므로 AuthenticationSuccessHandler를 상속하게 해도 됨) 그리고 onAuthenticationSuccess() 함수를 오버라이딩해줘야..
[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..