본문 바로가기

Java+Spring 박살내기8

OAuth 2.0 사용하여 카카오톡 로그인 구현하기 (Spring) 오늘은 프로젝트에서 구현을 맡았던 OAuth2.0을 사용하여 카카오톡 로그인을 구현하는 법을 알아보겠습니다! 먼저 OAuth 2.0이 뭔지 알아봐야겠죠?여러 사이트의 회원가입을 할 때 외부 소셜 계정을 기반으로 간편히 회원가입 및 로그인할 수 있는 어플리케이션을 다들 많이 보셨을 겁니다! 예를 들어 어떤 사이트의 회원가입을 할 때 카카오톡 로그인을 사용하면 그 애플리케이션에서 내 카카오톡 친구를 확인할 수도 있고 카카오톡의 기능을 사용할 수 있는 것을 다들 한 번쯤은 경험하신 적이 있죠?구글 로그인, 페이스북 로그인, 트위터 로그인 등등이때 사용되는 프로토콜이 OAuth입니다.쉽게 말해 사용자들이 따로 비밀번호를 설정하여 회원가입을 하지 않고 다른 사이트의 자신 정보를 들고 와 사용할 수 있도록 해주는 .. 2024. 8. 14.
Redis와 Gmail SMTP 활용하여 이메일 인증 구현하기 오늘은 Redis와 Gmail SMTP를 활용하여 이메일 인증을 구현하는 방법을 알아보겠습니다!  일단 Redis와 Gmail SMTP에 대해 알아야겠죠?먼저 Gmail SMTP부터 알아봅시다!Gmail SMTP란? Gmail은 Google에서 제공하는 메일로 다들 알고 계실 겁니다.그럼 이제 SMTP가 뭔지 알아야겠죠?SMTP란 Simple Mail Transfer Protocol의 약자로 일반적으로 이메일을 송수신하는 서버를 뜻합니다. 그럼 Gmail과 SMTP 두 개를 합치면 Gmail을 송수신하는 서버를 뜻합니다.이 서버를 통해서 우리는 인증을 원하는 사용자에게 인증 메일을 보낼 것입니다.그럼 이제 Redis를 알아볼까요?? Redis란?Redis는 중요하기 때문에 조금 더 자세하게 알아봅시다! .. 2024. 7. 26.
통합 테스트와 단위 테스트 오늘은 통합 테스트와 단위 테스트를 비교해 보며 알아보겠습니다우선 통합 테스트란?모듈을 통합하는 과정에서 모듈 간의 호환성을 확인하기 위해 수행되는 테스트입니다.통합 테스트는 독립적인 기능에 대한 테스트라기보다웹 페이지로부터 API를 호출하여 올바르게 동작하는 지를 확인하는 것입니다.단위 테스트란?하나의 모듈을 기준으로 독립적으로 진행되는 가장 작은 단위의 테스트입니다.메서드 하나의 독립적인 기능을 테스트한다고 보면 됩니다.그럼 이 둘은 어떤 차이가 있는지 알아봅시다. 테스트 환경의 차이통합 테스트는 애플리케이션 전체를 로드하여 실제 환경과 유사한 조건에서 테스트를 수행합니다.반면에 단위 테스트는 격리된 환경에서 하나의 메서드가 독립적으로 잘 동작하는지 테스트를 수행합니다. 의존성 관리 방식 차이통합 테.. 2024. 7. 8.
N+1 원인과 해결 방법 오늘은 JPA의 N+1 문제와 해결법에 대해 알아보자. N+1이란?한 번의 쿼리를 날렸을 때 의도하지 않은 N번의 쿼리가 추가적으로 실행되는 것을 뜻한다.즉, 연관 관계가 설정된 엔티티 사이에서 한 엔티티를 조회 하였을때 한번의 쿼리로 해결할 수 있는 작업을 n+1 개의 쿼리로 실행하게 되는 문제이다.이해가 안되시나요?예를들어 하나의 POST가 있다고 칩시다. POST는 COMMENT와 OneToMany의 연관관계를 가지고 있습니다.순서대로 진행해 봅시다.POST 전체를 조회합니다. (1번의 쿼리 발생)POST 제목, 내용 조회 요청 (쿼리 발생 x)POST에 달린 COMMENT 내용 조회 요청 (조회된 POST의 개수(N) 만큼 추가적인 쿼리 발생)여기서 N+1이 발생합니다. (연관된 Entity를 불.. 2024. 7. 4.
JPA에서 Lazy Loading 과 Eager Loading 오늘은 Lazy Loading과 Eager Loading에 대해서 알아보자.영어 그대로 지연 로딩과,  즉시 로딩이다.Lazy Loading(지연 로딩)은 참조 객체들의 데이터들은 무시하고 해당 엔티티의 데이터만 가져오는 방식.Eager Loading(즉시 로딩)은 데이터를 가져올 때 하나의 객체만 가져오는 것이 아닌 참조 객체 데이터까지전부 읽어오는 방식예시를 보자아래에 User Entity가 있고 orders라는 필드는 지연 로딩 설정이 되어 있다.@Entitypublic class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; // 지연 로.. 2024. 7. 4.
Swagger, Springdocs 오늘은 Swagger와 Springdocs에 대해서 간단하게 알아보고 사용해보자.그게 뭔데? Swagger란 쉽게 말해서 API 문서 작업을 대신 해주는 것이라고 보면 된다.Swagger UI를 통해 문서화된 API를 시각적으로 확인하고 테스트 할 수 있다. 엄청 신기하다. 그럼 Springdocs는??? 쉽게 말하면 Swagger를 Spring Boot에서 더 쉽게 사용할 수 있도록 해주는 친구이다.API 문서를 간편하게 작성할 수 있도록 돕고 문서화된 API를 Swagger UI를 통해 시각적으로 볼 수 있게 해준다. 그럼 이제 사용해보자. 일단 gradle에 의존성 설정을 해준다.implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.. 2024. 5. 20.
오버라이딩과 오버로딩 객체 지향의 4가지 특징 중 하나인 다형성과 관련있는 오버라이딩과 오버로딩에 대해 알아보자. 오버라이딩과 오버로딩은 이름이 비슷해 많이 헷갈릴 수 있는 것 중 하나의 개념이다.둘에 대해서 정리해 보자. 먼저 오버로딩에 대해 알아보자. 오버로딩이란 같은 이름을 가진 메서드나 생성자를 여러 개 정의하는 것을 의미한다.이름은 같지만 매개변수의 타입, 순서 또는 개수가 다를 때 사용된다. 전 포스팅에서 알아봤던 컴파일 시점에 어떤 메서드가 호출될지 결정된다.컴파일러가 메서드나 생성자를 호출할 때 전달된 인자의 데이터 타입 및 개수를 파악하여 구분한다.https://changbroblog.tistory.com/81 컴파일 시점과 런타임 시점일단 프로그래밍이 어떻게 돌아가는지 알아보자. 크게 컴파일 시점과 런타임 .. 2024. 5. 10.
컴파일 시점과 런타임 시점 일단 프로그래밍이 어떻게 돌아가는지 알아보자. 크게 컴파일 시점과 런타임 시점으로 나뉜다. 💡 컴파일 시점컴파일 환경이란 우리가 코드를 작성하고 컴파일러에 의해 컴파일 되는 시점을 얘기한다  -> 프로그램 실행 전컴파일러가 이때 우리가 적고 읽을 수 있는 코드(.java )를 검사하고운영체제가 읽을 수 있는 바이트 코드(.class)로 변환시킨다. 💡 런타임 시점런타임 시점은 컴파일 시점이 끝나고 프로그램이 실행되고 사용자와 상호작용하는 동안 발생하는 시간이다.이때 객체가 생성되며 우리가 구현했던 메서드들이 호출되는 시간이다. 조금 더 자세하게 클래스 로더, 자바 인프리터, JIT 컴파일러에 대해 알아보자.자바 인프리터와 JIT를 JVM(자바 가상 머신)이라 부른다. 클래스 로더 -> 바이트코드(.c.. 2024. 5. 9.