본문 바로가기

분류 전체보기

(87)
백준 - 문자열 10809 문제 입력된 단어에 알파뱃이 있는지 확인하고, 있을시에는 알파뱃의 위치를, 없을 때는 -1을 입력하는 간단한 문제이다. 내 풀이 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringBuilder sb = new StringBuilder(); String str = br.readLine(); String[] ar..
QueryDSL 적용기 GitHub - Bipum-In/Bipum-In-BE: 비품인 백엔드 레포입니다. 비품인 백엔드 레포입니다. Contribute to Bipum-In/Bipum-In-BE development by creating an account on GitHub. github.com 이번에 진행했던 프로젝트에서 대시보드 기능 구현을 위해 쿼리를 작성할 일이 많았다. 기존 JPA를 사용하기에는 쿼리메소드의 이름이 길어져서 직관적이지 않다는 문제가 있었고, N+1 문제가 발생하여 성능이 떨어지는 이슈가 발생했다. JPQL 과 Native Query를 사용해서 복잡한 이름의 쿼리 메소드들을 직접 변환하여 문제를 해결하였지만, 그 과정에서 쿼리 문법 오류에 의한 Runtime Error가 자주 발생하였다. JPQL에서는 ..
SSE (Server Sent Events) 내가 담당했던 대시보드 기능 내에 실시간 알림 기능이 포함되어 있었다. 기존 HTTP 통신 방식은 1회성으로 요청(Request) - 응답(Response) 후 연결의 닫아버리는 특징을 가지고 있었기 때문에, 실시간 알림 기능 구현을 위해서는 클라이언트 - 서버 간 연결을 계속 유지 시킬 방법을 찾아야 했다. 방법으로 Web-Socket과 Server-Sent-Events 두 개의 선택지가 존재했다. 모두 실시간 통신을 가능하게 하지만 장단점이 존재했다. 실시간 알림 기능은 양방향 통신이 따로 필요없다는 점과, React - Spring에서 SSE에 관련된 함수가 내장되어 있다는 점, 별도의 세팅없이 HTTP 프로토콜을 사용해 통신한다는 점 때문에 SSE를 선택하여 실시간 알림 기능을 구현하기로 하였다...
Oauth란? 요즘 웹사이트 로그인 화면을 보면 아래처럼 다른 사이트의 계정을 연동하여 사용할 수 있도록 되어 있는 것을 흔히 볼 수 있다. 위와 같은 소셜 로그인은 기업 입장에서는 소규모 어플리케이션이나 스타트업 단계에 있어 인증/인가 과정에 들어가는 비용을 절감시키고, 사용자 입장에서 귀찮은 회원가입을 생략하여 클릭 몇 번으로 로그인 과정을 간소화하여 편리함을 높일 수 있다. 비품인 프로젝트에서도 구글 로그인을 사용하여 로그인 기능을 비교적 쉽게 구현해볼 수 있었다. 이러한 소셜 로그인 기능은 모두 Oauth 2.0 프로토콜을 사용하여 인증 / 인가가 이루어진다. 각 소셜 네트워크 플랫폼마다 인증코드를 발급받을 수 있는 방법은 상이하지만, 전체적인 프로세스는 위와 동일하게 이루어진다. 1. 소셜 로그인 서비스 제공..
리버스 프록시(Reverse Proxy) 이번에 진행했던 프로젝트에서 리버스 프록시라는 개념을 처음 접하고, 서버에도 적용해보았다. 프록시란 무엇이고, 어떤 역할을 하는지 정리하고 넘어가고자 한다. 프록시(Proxy) 프록시(Proxy)란 '대리', '대신'이라는 뜻을 가지며, 프로토콜에 있어서는 대리 응답 등에서 사용하는 개념이다. 클라이언트와 서버 사이에 존재하며, 중계기로서 대리로 통신을 수행하는 것을 Proxy라고 하며, 그 중계 기능을 하는 주체를 Proxy Server라고 한다. Proxy Server를 통해 요청에 대한 캐시를 저장하고, 중복 요청 시 동일한 응답을 보내어 클라이언트에게는 빠른 속도의 서비스를, 서버에게는 불필요한 부하를 줄이는 효과를 낼 수 있다. 프록시 서버가 어느 쪽을 바라보고 있느냐에 따라서 포워드 프록시, ..
백준 - 1차원 배열 10810 백준은 꾸준히 풀어보고 있다. 쉬운 문제들은 넘어가고 헷갈렸던 문제들에 대해서만 풀이를 남겨보려한다. 문제 풀이 문제의 난이도는 어렵지 않은 것 같은데, 문제를 이해하는게 시간이 오래걸렸던 것 같다. 처음에, 바구니의 갯수 N과 바구니에 공을 넣는 횟수 M이 주어진다. 바구니에 공을 넣는다는게, 1 ~ N 번호의 바구니에 공을 한번씩 전부 집어넣는다는 의미이다. 둘째 줄부터는 공을 넣는 방식이라고 이해하면 된다. 1 2 3 의 숫자가 주어졌다면, 1번부터 2번 바구니까지 3번공을 전부 집어넣겠다는 것이다. 정리하자면, 공을 M번 넣을건데 각 횟수마다 어떻게 공을 집어넣을지 값을 받아서 계산하는 문제이다. 바구니에는 1개의 공만 들어가기 때문에, 만약 넣어야할 바구니에 공이 들어있다면 공을 교체한다. pu..
항해 99 12기 수료 후기 (Spring) 1월 초부터 4월말까지 쉼없이 달려왔던 99일의 여정이 마무리 되었다. 주특기 프로젝트부터는 어떻게 지나갔는지 모를 정도로 금방 지나가 버린 것 같다. 수료식에서는 최종 프로젝트가 전체 투표 1위로 최고의 프로젝트로 선정되어 상을 받게 되었다. 프로젝트 시연 영상 배포 URL - https://bipumin.shop BE Github - https://github.com/Bipum-In/Bipum-In-BE 항해 99를 마치며, 그동안의 과정들을 돌아보며 후기를 남겨보려 한다. 내가 항해를 시작한 이유 국비지원교육 이후, 웹 개발자로 커리어 시작을 할 줄 알았다. 하지만 막상 들어갔던 첫 직장에서는 RPA 개발자로 근무하게 되었다. RPA 개발자로서 직무에 익숙해지고 회사에서 인정 받을 수록, 마음 속 ..
백준 - 입출력과 사칙연산 2257 항해 99를 마치고, 알고리즘 공부를 새롭게 시작하고자 한다. 그동안 시간 복잡도 개념에 대해서 무지한 채로 코딩을 진행해왔었는데, 좀 더 클린한 코드를 작성하기 위해서 시간 복잡도 개념이 들어가있는 백준에서 알고리즘 문제풀이를 시작하려고 한다. 프로그래머스와 달리 백준은 답변을 제출하는 방식이 달랐다. 제출할 코드의 클래스 이름을 반드시 Main으로 통일해주어야한다. 2257 문제는 Hello World!를 출력하는 간단한 문제였다. package 입출력과_사칙연산.Q2257; import java.io.*; public class Main { public static void main(String[] args) throws IOException { BufferedWriter bw = new Buffe..