본문 바로가기

전체보기

(124)
[Spring Security] Access Token Request, Response 커스터마이징 - Tistory OAuth2 로그인 구현하기(1) 작업 환경 spring-boot : 2.4.5 spring-security : 5.4.6 java : 11 Tistory API를 사용해 간단한 애플리케이션을 만드려고 했는데 예상치 못한 어려움에 부딪혔다..... 일반적으로 OAuth2 인증 방식은 Authentication Code를 얻은 다음 POST 요청에 담아 다시 전달하면 Access Token이 응답으로 오는데 Tistory는 이를 GET 요청으로만 허용해 응답이 오지 않았다. 때문에 Token요청을 보내는 Request를 커스텀하는 작업이 필요해졌다. 1️⃣ Access Token Request Customizing Authentication Code 응답을 받은 Spring Security는 이 Code를 담아 다시 Request를 전달하..
[백준] 1072번: 게임 - JAVA 🔗 문제 링크 BOJ 1072번: 게임 1072번: 게임 김형택은 지금 몰래 Spider Solitaire(스파이더 카드놀이)를 하고 있다. 형택이는 이 게임을 이길 때도 있었지만, 질 때도 있었다. 누군가의 시선이 느껴진 형택이는 게임을 중단하고 코딩을 하기 시 www.acmicpc.net 1️⃣ 이분 탐색 📝 풀이 과정 새로운 게임을 하게 되면 계산되는 확률은 $((y+횟수) \times 100) / (x + 횟수)$ 따라서 해당되는 횟수가 최소로 증가할 때 확률의 값이 변하는 경우를 찾으면 된다. 주어진 게임의 2배만큼 진행했는데도 확률이 변하지 않았다면 더이상 변하지 않기 때문에, 0부터 최고 1,000,000,000번 진행했을 때까지 이분탐색을 통해 값을 찾을 수 있다. 💡 부동소수점 오차 변수..
[Spring] AOP, Spring AOP AOP Aspect Oriented Programming(관점 지향 프로그래밍) 로직을 기준으로 핵심 관점(비즈니스 로직)과 부가 관점을 나누고, 관점을 기준으로 모듈화하는 것 데이터베이스 연결, 로깅, 파일 입출력, 시간 측정 등의 여러 번 반복해서 사용하는 흩어진 Aspect를 모듈화해 핵심 로직에서 분리하여 재사용이 가능하도록 하는 방법이다 같은 일을 반복하는 코드를 독립적으로 작성하고 적용해야 하는 부분을 개발자가 구체적으로 작성해 적용할 수 있다. 주요 용어 Aspect 흩어진 관심사를 모듈화 한 것 Advice + Pointcut Target Aspect를 적용하는 곳(클래스, 메소드 등) Advice 실질적으로 수행하는 기능 제공할 부가기능을 담고 있다 Join Point Advice가 적용..
[Spring] Bean 주입하기 : DI 스프링에서는 객체의 생성과 소멸 등에 대한 제어를 컨테이너가 관리하고 필요할 때 주입을 받아 사용하게 된다. DI 방법 1. 생성자 기반 주입 종속성을 나타내는 인수로 생성자를 호출하는 컨테이너에 의해 수행된다. 컨테이너가 알아서 생성자에게 객체를 넣어주면서 생성하게 된다. 생성자의 파라미터를 통해 의존 관계를 파악하기 쉽다는 장점이 존재한다. public class SimpleMovieLister { private final MovieFinder movieFinder; public SimpleMovieLister(MovieFinder movieFinder) { this.movieFinder = movieFinder; } } 클래스에 생성자가 한 개만 존재하고 매개 변수 타입이 빈으로 등록되어 있다면 사..
[Spring] Bean Scope와 주의할 점 일반적으로 스프링은 처음 구동될 때 초기에 모든 Bean을 생성하고 인스턴스를 생성한다. 하지만, 매번 다른 객체가 사용되어야 하는 경우에는 Bean의 scope를 변경하면 매번 다른 객체를 생성해 사용할 수 있게 된다. Bean Scope singleton 기본적으로 다른 설정을 지정하지 않았을 때 지정된다. 애플리케이션을 구동하면 bean마다 하나의 객체가 생성되고 스프링을 통해 bean을 주입받게 된다면 언제나 같은 객체를 참조하게 된다. 하나의 객체를 통해 주입하게 되므로 메모리를 절약할 수 있고, 런타임시 성능 최적화에 유리하다는 장점이 존재한다. 하지만, 프로퍼디를 공유하기 때문에 다른 객체에서 값을 변경해도 그대로 참조되어 예상치 않게 값이 변경될 수 있고, 초기에 모든 빈을 생성해야 하기 ..
[Spring] Bean을 등록하는 방법 스프링에서는 빈을 개발자가 직접 생성하지 않고 스프링에게 위임해 생성된 빈을 주입하는 방법으로 사용하게 된다. IOC를 위해 주입할 빈을 등록하고 관리를 위임해야 한다. 1. xml에 직접 설정하기 // application.xml ApplicationContext context = new ClassPathXmlApplicationContext("application.xml"); 단점으로는 모든 빈을 직접 등록하고 의존성도 모두 작성해야 했기 때문에 굉장히 번거롭고 불편하다. 2. Component Scan @Component 가 붙은 객체를 스캔해 등록한다. @Service, @Repository, @Controller, @Configuration 들은 모두 @Component를 상속받고 있기 때문에 ..
[프로그래머스] 가사 검색 / 2020 KAKAO BLIND RECRUITMENT - JAVA 🔗 문제 링크 [프로그래머스] 가사 검색 / 2020 KAKAO BLIND RECRUITMENT 코딩테스트 연습 - 가사 검색 programmers.co.kr 1️⃣ Trie 📝 풀이 과정 words의 길이는 100,000개, queries의 길이는 100,000개로 단순 탐색시 시간 초과가 발생한다. 다음으로 생각한 풀이는 Trie를 사용하는 방법이었다. words를 모두 Trie에 insert한 다음 queries를 통해 문자열을 검색할 때, 삽입된 문자열의 길이를 모른다면 탐색하기 어렵다. 때문에, Trie의 노드마다 lenMap을 생성하였다. key는 삽입된 문자열의 길이고, value는 해당 길이의 문자열의 개수를 가지고 있다. 따라서 Trie의 node 위치에 도달했을 때, 해당 노드까지 도달..
[프로그래머스] 자물쇠와 열쇠 / 2020 KAKAO BLIND RECRUITMENT - JAVA 🔗 문제 링크 [프로그래머스] 자물쇠와 열쇠 / 2020 KAKAO BLIND RECRUITMENT 코딩테스트 연습 - 자물쇠와 열쇠 [[0, 0, 0], [1, 0, 0], [0, 1, 1]] [[1, 1, 1], [1, 1, 0], [1, 0, 1]] true programmers.co.kr 📝 풀이 과정 열쇠를 자물쇠에 맞게 움직이며 비교하면서 답을 찾는 문제이다. 열쇠는 자물쇠를 벗어나게 대볼 수 있기 때문에 자물쇠를 기준으로 -M ~ +N까지의 범위로 비교해볼 수 있다. 만약 자물쇠가 모두 1(돌기)인경우까지 생각해 열쇠를 아예 벗어나게 대보는 경우도 고려했다. 함수에 y, x를 전달하고 해당 범위만큼 열쇠를 자물쇠에 대보는 연산을 수행한다. 예를 들어 (-2, -1)만큼 벗어나게 대본다고 가정..