전체 글
-
[원티드 인턴십] 231025Today I Learned 2023. 10. 25. 23:48
팀 프로젝트 시작! 원티드 프리온보딩 백엔드 인턴십 10월 과정에 지난 주 합격해 이번 주 월요일부터 과정을 진행하고 있다. 어제는 팀 빌딩이 진행되어 팀원분들과 4주 간 활동을 위한 규칙들을 정했고, 오늘은 오전 주어진 첫 팀 프로젝트 과제인 API 서버 구현 과제를 원활히 수행하기 위한 다음의 작업들을 진행했다. 요구사항 분석 및 명세 공통 API 및 ERD, 프로젝트 구조 설계 개발 환경 및 협업 도구 선정 이후 사전에 생성한 Spring Boot 스켈레톤 프로젝트를 기반으로 프로젝트를 생성했다. 작업에서 공통적으로 따를 따를 package 구조, 예외처리 로직을 정의한 뒤 원격 저장소에 반영했다. 배움의 장 작업을 진행하면서 가장 인상적이었던 부분은 팀 문서를 Notion에 작성하면서 각 영역들을..
-
[Java] String 덧셈 연산 대신 StringBuilder 또는 StringBuffer 객체를 활용해 성능 개선하기Today I Learned 2023. 10. 23. 23:04
StringBuilder Java 5에서 추가된 문자열 생성이나 연산, 수정을 효율적으로 처리하기 위해 도입된 클래스이다. 자세한 메서드 호출 방법은 StringBuilder.java 내 설명을 참조할 수 있다. String text = new StringBuilder() // StringBuilder 객체에 주어진 문자열을 추가한다. .append("hello") .append("World!") // StringBuilder 객체 내 문자열의 지정한 인덱스에 주어진 문자열을 추가한다. .insert(5, ", ") // StringBuilder 객체 내 문자열의 지정한 인덱스 범위만큼을 주어진 문자열로 대치한다. .replace(0, 1, "H") .replace(7, 12, "world") // St..
-
[OAuth] 소셜 로그인 구현: 2. 카카오 로그인 구현Today I Learned 2023. 8. 1. 21:51
본 글에서는 Spring Boot, React를 사용하는 백엔드/프론트엔드 애플리케이션에서 카카오 로그인을 구현하는 과정을 정리했다. 소셜 로그인을 구현하는 전체 과정은 다음의 순서에 걸쳐서 작성될 예정이다. OAuth 이해하기카카오 로그인 구현네이버 로그인 구현 카카오 소셜 로그인 플로우카카오에서 제공하는 소셜 로그인을 위한 플로우는 다음과 같다. 해당 플로우를 OAuth 프로토콜 플로우에 대입하여 살펴보았다. 로그인 방식으로는 사용자 서버 애플리케이션이 카카오 계정 소유자의 정보를 이용해 생성한 액세스 토큰을 사용자 클라이언트 애플리케이션에 반환하는 방식을 적용했다. 권한 부여1. 사용자 클라이언트 애플리케이션에서 카카오 계정 소유자의 개인정보 접근 권한을 획득하기 위해 카카오 계정 소유자를 카카오 ..
-
2023년 7월 2-3주차 주간 회고주간 회고 2023. 7. 25. 03:02
다양화하기이전에는 해볼까? 말까? 망설였던 것들을 다양한 방면에서 조금씩 해 보는 것들을 시도해보고 있다. 개발 서적 스터디지지난주 초 쯤, 같이 성수코딩도장을 수료했던 동료분께서 'HTTP 완벽 가이드' 북 스터디를 모집하셨고, 모집 글을 보고 나서 잠깐의 고민 뒤에 바로 참가신청을 했다. 스터디는 주 4회, 하루에 두 챕터씩 소화하면서 3주 동안 책을 1회독하는 것을 목표로 하고 있다. 이때 진도를 나가는 챕터는 스터디 이전에 2번 이상 읽어오는 것을 전제로 하고 있다. 평소에 책을 일단 사 두기는 하는데 정작 생각만큼 잘 읽지 않고 쌓아두는... 편이라 책에서 특정 필요했던 부분의 지식들을 읽고 정리해놓는 게 아니고서는 어떤 책을 완독한 기억이 썩 많지 않았다. 언젠가 한 번은 이 문제를 꼭 극복하..
-
[OAuth] 소셜 로그인 구현: 1. OAuth 이해하기Today I Learned 2023. 7. 20. 16:37
본 글에서는 Spring Boot, React를 사용하는 백엔드/프론트엔드 애플리케이션에서 소셜 로그인을 구현하기 위해 OAuth 2.0 인증 프레임워크에 대해 이해한 내용을 정리했다. 소셜 로그인을 구현하는 전체 과정은 다음의 순서에 걸쳐서 작성될 예정이다. OAuth 이해하기 카카오 로그인 구현 네이버 로그인 구현 OAuth 2.0 OAuth는 특정 서버가 보유한 특정 사용자의 리소스에 대하여 타사 애플리케이션이 해당 리소스의 HTTP 서비스 액세스를 제한적으로 획득할 수 있도록 하는 인증 프레임워크이다. 용어 정의 OAuth에서 정의되는 주요 역할들은 다음과 같다. 리소스 소유자 (Resource Owner) 리소스 서버가 보유한 특정 리소스의 소유자이며, 해당 리소스에 대한 액세스 권한을 부여할 ..
-
2023년 7월 1주차 주간 회고주간 회고 2023. 7. 10. 03:02
루틴 만들기 의도했던 루틴 만들기는 의도대로 되지 않았고, 의도하지 않았던 (그렇지만 결국에는 필요하다고 할 수 있는) 루틴이 자리잡게 된 한 주간이었다. 매일 꾸준히 운동하는 루틴이 잡혔다. 수요일에 외출하면서 봄에 입었었던 바지를 입었는데, 그렇게까지 입기 힘들지 않았었던 바지였는데 입고 돌아다니기 불편하다는 느낌이 들었다. 설마 싶어 뱃살을 잡아보니 한 움큼 잡혔다. 개발자를 멸치와 돼지로 양분하자면 나는 돼지에 속하는 편인데, 위험 신호라고 느껴졌다. 그날부로 런닝을 매일 뛰기 시작했다. 토요일마다 성수코딩도장 동료분과 런닝을 간간히 뛰어오고 있었기 때문에 런닝에 대한 허들이 꽤나 낮아져 있어 나가는 건 어렵지 않았다. 오늘까지 빠짐없이 매일 4-6km 가량을 뛰었다. 지난 주간회고 때 계획했던 ..
-
2023년 6월 5주차 주간 회고주간 회고 2023. 7. 3. 02:14
대공사 ver.2 리팩터링을 일차적으로 마친 프로젝트 백엔드 애플리케이션과 프론트엔드 애플리케이션 간 API와 리소스를 일치시키기 위해 프론트엔드 애플리케이션 리팩터링을 진행 중이다. 일단 UI로 보여지는 것 자체는 '운동 종류' 카테고리가 사라지는 것 외에는 같을 예정이지만, 애플리케이션의 근간을 이루고 있던 Post와 Game 도메인이 Game으로 병합되었기 때문에, 프론트엔드에서도 Post의 이름으로 상태를 관리하고 있던 다수의 비즈니스 로직과 이를 받아 처리하는 UI 컴포넌트들의 수정이 불가피하다. 즉, 여기도 대공사를 진행해야 한다. 이왕 대공사를 진행하는 김에, 다음의 부분들에 집중해서 개선을 진행해볼 계획이다. 상태 관리 영역을 '완전히' 리소스별로 구분 상태 관리 영역을 UI와 구분하고, ..
-
[SQL][QueryDSL] LEFT JOIN, RIGHT JOIN의 차이점 비교하기 (Feat. 상속 관계의 Entity 쿼리하기)Today I Learned 2023. 6. 27. 15:50
채팅 기록 조회 백엔드 애플리케이션에서 특정 사용자가 자신이 참가하는 경기 게시글에 생성된 채팅방 페이지로 이동할 때, 해당 경기 식별자를 갖는 모든 채팅 내역을 조회하는 기능이 있었다. 해당 기능은 JPQL을 직접 작성해 Repository의 쿼리 메서드에 부여하는 방식으로 구현했었고, 이때까지는 사용자가 실제로 입력한 메시지와 특정 이벤트가 발생했을 때의 메시지를 구분해서 조합한 뒤 클라이언트에 DTO로 반환하고 있었다. 해당 기능을 위한 Entity인 ChattingMessage를 추상 클래스화하고, 채팅 메시지와 이벤트 메시지를 ChattingMessage를 상속받은 구체 클래스로 정의해 모든 메시지를 하나의 List에 담아 반환하도록 하는 것을 리팩터링의 목표로 두고 작업을 진행하던 중, LEF..