분류 전체보기(361)
-
[Spring Boot] Spring OAuth 없이 Spring Boot로 Github OAuth 사용하기[2/2]
이전 글에 이어서 본격적으로 OAuth 기능을 구현해보자. 먼저 Github OAuth Api를 확인하자. https://docs.github.com/en/developers/apps/building-oauth-apps/authorizing-oauth-apps Authorizing OAuth Apps - GitHub Docs GitHub's OAuth implementation supports the standard authorization code grant type and the OAuth 2.0 Device Authorization Grant for apps that don't have access to a web browser. If you want to skip authorizing your a..
2021.11.22 -
[Spring Boot] Spring OAuth 없이 Spring Boot로 Github OAuth 사용하기[1/2]
스프링 부트 기반으로 Oauth를 다루려고 검색해보면 거의 대부분 Spring OAuth 모듈을 사용해서 해결하는 것 같다. 이번 글에서는 OAuth 라이브러리 없이 직접 Github OAuth를 활용해 Github API에 접근하는 글을 작성하도록 하겠다. 사전 준비 사항 깃허브 아이디 스프링 부트 기반 컨트롤러 매핑 지식 HTTP Oauth 기초 지식 OAuth 간단 정리 OAuth가 뭔지 간단하게 정리하고 가자. OAuth는 서비스 제공자가 직접 사용자의 정보를 관리하지 않고 외부 사이트에 존재하는 사용자의 정보에 대해 서비스 제공자에게 권한을 부여하는 개방형 표준이다. 우리가 평소에 회원가입을 통해 이름, 아이디, 비밀번호 등을 직접 입력하는 방식은 서비스 제공자가 정보를 관리하게 된다. OAut..
2021.11.22 -
2. IOC와 DI
앞서 살펴봤듯이 기본적인 다형성으로는 OCP와 DIP를 충분히 지킬 수 없었다. 이는 DI를 통해 해결할 수 있다. 1. 도메인 설계 휴대폰 매장을 오픈한다고 가정해보자. 클라이언트는 통신사에 해당하는 휴대폰을 개통할 수 있을 것이다.사장님은 SKT, KT, LG U+ 중에 어떤 매장으로 오픈할지 정하지 못하셨다. 일단은 KT로 생각 중이라고 하신다. 그렇다고 손만 빨고 있을 수는 없다. 다형성을 이용해 미리 개발해놓도록 하자. 이를 역할과 구현을 분리하여 클래스 다이어그램으로 표현하면 다음과 같다. 이를 간단하게 코드로 구현해보자. public interface MemberService { void open(); } public class MemberServiceImpl implements Member..
2021.11.22 -
1. 객체지향 설계와 스프링
1. 스프링의 탄생 배경 초기의 자바 웹 개발은 EJB를 통해 개발했다. 당시에 분산 시스템, 트랜잭션 등과 같은 기능을 지원하고 ORM, 객체지향적 설계 등이 적용된 통합적인 프로그램이었다. 하지만 개발자가 사용하기가 상당히 어렵고 느리다는 단점이 있었다. 그래서 로드 존슨이라는 개발자가 EJB를 비판하며 책을 내는데 이것이 스프링의 시작이 된다. 스프링이라는 이름도 EJB라는 겨울에서 봄(Spring)이 왔다는 뜻으로 붙여진 이름이다. 2. 스프링의 핵심 개념 기술을 배울 때 가장 중요한 것은 그 기술이 어떤 문제를 해결하기 위해 탄생했는지, 핵심 원리가 무엇인지 파악하는 것이다. 그 외의 것들은 부가적인 부분인 것이다. 이를 깨우치면 아무리 기능이 많아지더라도 빠르게 기술을 습득할 수 있다. 스프링..
2021.11.22 -
[Effective Java] item 2. 빌더 패턴을 고려하라
문제 일반적인 자바빈 규약을 준수한 객체를 생성하려고 하면 코드가 장황해지고 메서드를 여러 개 호출해야 한다. 다음과 같은 객체가 그러하다. public class Room { private int roomNo; private Sofa sofa; private TV tv; private Bed bed; public Room() {} // 게터 및 세터 } 위와 같은 경우 빈 객체를 생성하고 세터 메서드로 모두 값을 지정해주어야 한다. 이렇게 객체를 구성하면 세터로 모든 멤버 변수를 지정해주기 전까지 일관성이 무너진 상태가 된다. 또한 매개변수들이 전부 유효한지 생성자를 통해 확인했는데 세터로 값을 주입받기 시작하므로 안정성 또한 무너졌다. 이러한 문제점 때문에 버그가 발생할 확률이 증가하고 디버깅 및 유..
2021.11.19 -
14. Chain of Responsibility Pattern
문제 클라이언트가 숫자를 필터링하는 프로그램을 개발해달라고 요청했다. 그런데 단순히 하나의 조건만 있는 것이 아니라 여러 필터를 순서대로 처리하고 싶다고 한다. 즉 체인의 형태로 구성하는 필터를 원하는 것이다. 아주 간단하게 프로그래밍한다면 if 문으로 다 처리할 수 있겠지만 프로그램의 규모가 커지고 복잡해질수록 유지보수하기 힘들어진다. 그렇다면 이를 어떻게 해결해야 할까? 해결 방안 이러한 문제는 역할 사슬 패턴으로 효과적으로 처리할 수 있다. 체인 역할을 하는 클래스를 이해하기 쉽도록 필터라고 부르겠다. 필터 클래스는 연결 리스트를 구현할 때처럼 next라는 멤버 변수를 갖고 있다. 이를 통해서 체인을 구현할 수 있는 것이다. 정수기에서 물을 정수하기 위해 여러 가지 필터를 사용한다고 생각하면 이해하..
2021.11.14