본문 바로가기

전체 글

(165)
스프링 시큐리티를 이용한 회원가입 📌Intro 스프링 부트를 이용한 로그인, 회원가입 기능은 크게 두가지 방법으로 구현할 수 있다. WebMvcConfigurer를 구현하는 WebMvcConfig 스프링 시큐리티를 사용하는 @EnableWebSecurity SecurityConfig 이 글에서는 후자의 방법으로 로그인, 회원가입을 구현해보고자 한다. 📌 스프링 시큐리티란? 스프링 시큐리티는 인증과 권한을 담당하는 프레임 워크이다. 복잡하지 말고 '인증'과 '권한'만 생각하자. 인증(Authenticate)은 로그인을 의미한다. 권한(Authorize)은 인증된 사용자가 어떤 것을 할 수 있는지를 의미한다. 📌 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-secu..
2023년 8월 회고록 Intro. 생각하며 살지 않으면 사는대로 생각하게 된다. 8월 한달을 정리하자면 후자처럼 살았던 것 같다. 우선 8월 한달 공부량이 7월 첫주 제외 공부량과 같다. 수치적으로 뿐 아니라 흘러가는대로 살아가고 있는 듯한 무력함이 많이 느껴진다. 8월 한달동안 어떤 삶을 살았는지, 4F 회고 방식으로 정리하려 한다. Fact (사실) - 첫주는 해야 할 일이 많았고, 제대로 끝내고자 하는 의지도 강해서 열심히 살았음 - 이후 명확한 목표가 사라지고 복습을 하는 주간이 옴 - 복습 주간에 집중을 못하고, 필요성을 많이 못 느낌 - 그렇게 복습이 덜 된채로 새로운 프로젝트 시작 - 그리고 해커톤(귀농귀농) 프로젝트 시작 - 귀농귀농이 해커톤에서 떨어지고 포폴용 프로젝트로 전환됨 - 이즈음 관절염으로 고생, 휴..
[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는 개발 과정에서 계속 변경되므로 작성한 명세 문서도 주기적인 업데이트가 필요함 하지만 명세 작업은 번거롭고, 어플리케이션과 명세가 일치하지 않는 문제가 발생할 수도 있음 이 같은 문제..