일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Apple 로그인
- Spring Cloud OpenFeign
- 티스토리챌린지
- querydsl
- Spring Security
- REDIS
- 도메인 주도 설계(DDD) 기반 마이크로서비스(MSA) 모델링
- 사이드 프로젝트
- FeignClients
- microsoft
- OpenFeign
- Spring Reactive Programming
- ExecutorService
- spring boot
- 프로세스
- 멀티태스킹
- 스레드
- OAuth2.0
- springboot
- 비동기
- 오블완
- 2024년 상반기 회고
- 코드로 배우는 스프링 부트 웹 프로젝트
- 비사이드프로젝트
- JWT
- ExceptionHandlerFilter
- 네이버클라우드 서버
- asciidoctor
- 멀티스레드
- 멀티프로세싱
- Today
- Total
목록전체 글 (29)
기록하기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/nAino/btsKMN94zlp/MZb2hCCkAxwdmpOIkEn7t1/img.png)
Java 21 의 Virtual Thread 는 기존의 Java 멀티스레딩 모델을 개선하여 '더 높은 처리량' 과 '효율적인 리소스 활용' 을 가능하게 해주었다고 한다.여기서 더 높은 처리량이라는 것은, 같은 시간 및 기간이 있을 때 더 많은 일을 수행하는 것을 의미하는데 그 일을 수행하고 처리량을 증대시킨다는 것의 기준이 되는 개념은 프로세스와 스레드라고 생각해서 이 내용을 먼저 정리하고 그 이후에 Virtual Thread 에 대한 내용을 살펴보고자 한다. 이미 많은 블로그와 강의에서 잘 정리된 내용들이지만, 스스로 내용 정리를 해보지는 않았어서 이 연재의 첫 시작을 '프로세스와 스레드, 멀티태스킹' 으로 잡았다. 프로세스와 스레드, 멀티태스킹(현재글)멀티태스킹하나의 CPU 코어만 있는데도 마치 여러..
2024년이 얼마 안 남은 상태에서 뒤늦은 2024년 상반기 회고를 작성해보려고 한다. 더 이상 미룰 수 없기에..ㅎ 바쁘다 바빠전적 이동을 23년도 11월쯤 했기 때문에 약간의 적응 시기 이후에 1월부터 거의 바로 TF 프로젝트에 참여했다. 처음에는 서비스를 이해하는 시간을 갖고 그 이후로 B2B 서비스를 SaaS 화 하는 작업에 들어갔다. MSA 구조를 설계하고 관련 PoC 를 진행하면서 팀원들과 회의 시간을 많이 가졌던 시기이다.특히나 기존 로그인 체계도 token 기반으로 변경이 필요했고, MSA 구조에 대한 테스트도 필요했기 때문에 1-2월은 많이 공부하는 시기였던 것 같다. 이후 3월 ~ 5월까지는 1차 배포를 위해 너무 정신없이 흘러갔던 시기였다. 이슈를 처리하고 QA 과정을 거치면서 회사 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/b72lfk/btsKALKlnFM/Q5pGl6noOF77ihHGmkR511/img.png)
소셜 로그인을 연동하면서 Kakao, Naver, Google, Apple 로그인은 연동을 해보았지만, Microsoft 연동은 처음이었다.진행하면서 많이 헤맸던 부분도 있고 더 공부가 필요하다고 생각한 부분도 있어서 더 까먹기(?) 전에 블로그에 정리를 해보려고 한다. 글의 목차는 다음과 같다. Microsoft 로그인을 위한 앱 설정Spring Security 설정OAuth2.0 흐름과 custom 설계Microsoft 로그인을 위한 앱 설정앱 설정다른 소셜 로그인과 마찬가지로 일단 앱 등록 과정이 필요하다.Microsoft Entra 관리 센터에 들어가서 앱 등록을 해주면 되는데 Microsoft(이하 MS) 연동에서는 조금 다른 개념 하나가 있다. 그 개념은 바로 tenant 라는 개념이다.Mic..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bQh5vU/btsvlIa34ms/NpHoXXwFYPvDp6PkPS8gEK/img.png)
혼자 만들어 보려는 toy project 에는 Kotlin 을 활용해서 만들어보려고 한다. 그러기 위해서는 일단 기초적인 내용 학습과 더불어 간단한 web application 을 만들어봐야겠다고 생각을 했고, 학습을 위해 인프런 강의 2개를 수강하고 있다. 수강을 하면서 간단하게 내용을 정리해보려는데 강의 내용과 코틀린 공식 문서를 참고해서 내용 정리를 해보려고 한다. (* Kotiln 을 코틀린이라고 명시함.) Classes 먼저, Class 는 간단한데 코틀린에서는 class 라는 키워드를 활용해서 정의하며 body 가 없으면 {} 는 생략 가능하다. class Person( //기본 생성자 val name: String, var age: Int ) { Constructors 위 예시를 보면 () ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/L2rJs/btsudYMDfKe/sBJQV8Thu3LHSDUIPfDXKk/img.png)
File I/O 자바의 I/O 는 기본적으로 InputStream, OutputStream 이라는 abstract 클래스가 제공된다. 어떤 파일을 읽을 때 InputStream 의 자식 클래스로 읽고, 데이터를 쓸 때에는 OutputStream 의 자식 클래스로 쓰면 된다. 이때 꼭 기억해야 하는 메소드는 read(), close() 이며 특히 close() 의 경우 리소스를 닫을 때 사용하는 메소드로 매우 중요하다. 결국 '자원'을 쓰는 것이므로 close 를 해줘야 하며 try-catch-finally 에서는 finally 에서 close() 처리를 해줄 수 있었다. test.txt 더보기 Java File I/O test file try-catch-finally public class TryCatc..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/eG0XbH/btsts7CzEjD/5RA1kp1WMMRgkEMr2QdmUK/img.png)
String Constant Pool String 클래스는 equals() 메소드를 사용해서 비교를 해야하는데 이는 자바의 Constant Pool 이 존재하기 때문이다. Constant Pool 이란, 객체 재사용을 하기 위해 만들어진 것으로 String 의 경우 동일한 값을 갖는 객체가 있으면 이 객체를 재사용한다. 즉, Constant Pool 이라는 메모리 공간에 중복되지 않는 String 문자열을 저장하고, 해당 문자열에 접근할 때마다 메모리 주소를 반환하는데 이를 통해 메모리 공간을 절약할 수 있다. 그렇다면, 아래의 경우에는 과연 결과가 어떻게 나와야할까? String test1 = "abc"; String test2 = new String("abc"); //1) System.out.prin..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cKp2F2/btssbhuLOgB/adG1dQiJZ44aGHau5itKI1/img.png)
사이드 프로젝트에서나 사내에서 많이 적용하고 있는 OpenFeign 에 대해 그 적용 과정에서 겪었던 어려움을 정리해보고자 한다. Spring Cloud OpenFeign 먼저, OpenFeign 이란, 복잡성을 줄이고 외부 API 호출을 쉽게 할 수 있도록 지원하는 Declarative REST Client 로 다음과 같은 특징을 가진다. API 응답 캐싱 지원 URI 템플릿 표현 지원 Retry API 지원 서버 간의 통신을 하거나 외부 API 를 호출할 때 기존 프로젝트에는 RestTemplate, WebClient 등 다양한 방법으로 구현이 되어 있지만 이번에 신규 프로젝트를 구성하면서 OpenFeign 으로 설계를 진행해보았다. 구현을 하면서 예전에 OpenFeign 설정 과정에서 어려웠던 문제..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/dSiEPm/btssgpL2Fdm/EVKs1Kwg9mCMBurk1Swfr0/img.png)
자바의 아키텍처를 보면 JDK 와 JRE 로 나뉘어져 있는데, JRE 는 자바를 실행할 수 있는 환경의 집합이라고 볼 수 있고 자바에서 제공하는 여러 라이브러리로 구성되어 있다. 이 중에서 GC 는 자바의 성능과도 관련이 있는데, 자동화된 가비지 컬렉터는 낮은 우선순위의 쓰레드로 동작하기 때문에 자바가 높은 성능을 낼 수 있도록 해준다. GC 란 무엇인가 먼저, JVM 이라는 용어를 이해해야 한다. JVM(Java Virtual Machine), 즉 자바 가상 머신은 자바 프로그램이 수행되는 프로세스를 의미한다. java 라는 명령어로 애플리케이션이 수행되면 JVM 위에서 애플리케이션이 동작하는 것이다. 여기서 JVM Heap 메모리와 관련하여 한 가지 주의해야할 것이 있는데, 가급적이면 maxHeapS..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cRxVk7/btssfyvYZ4t/HtCQHGMteaKxA91mGZLFi0/img.png)
Spring Webflux 를 공부하면서 Reactive Programming 에 대해 학습을 진행하였다. 그 중에서 가장 먼저, 항상 헷갈리는 개념인 동기 vs 비동기, Blocking vs Non-Blocking 에 대해 내용을 정리해보고자 한다. 내용 정리에 앞서 결론적으로 먼저 정리를 해보자면, 더보기 Caller : 호출하는 함수 Callee : 호출 당하는 함수 동기와 비동기의 차이는 Caller 가 Callee 의 결과에 관심을 가지는지 여부 Blocking 과 Non-Blocking 의 차이는 제어권을 Caller 와 Callee 중 누가 가지고 있는지 이렇게 정리할 수 있으며 위 기준에 따라 구분할 수 있다. 이제 이 내용을 바탕으로 함수 호출 관점에서, I/O 관점에서 내용을 정리해보고..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Z6H5a/btsddTH8Ar8/p3k5oJfDXEeIbFYH2K95Tk/img.png)
디프만 13기 SERVER 파트에 참여하게 되었다🥳 초반에는 팀 별로 같이 아이디어 회의를 통해 기능을 도출하는 시간이기 때문에 SERVER 파트끼리는 사용해보고 싶은 기술 스택이나 아키텍처에 대해 이야기를 나눌 시간이 주어졌다. 이번에 우리 팀에서는 헥사고날 아키텍처를 경험해보고 싶다는 의견과 + 그 내부적인 도메인을 DDD 로 설계하고 싶다는 의견이 나왔다. 그리고 멀티 모듈을 활용하여 설계를 하고 싶다는 의견을 같이 더하여 결국 하고 싶었던 것, 공부해보고 싶었던 것 다 해보자! 라는 결론이 나오게 되었다. 하고 싶은 거 다 해보기! 그러나 DDD 어떻게 설계해야 복잡성이 좀 줄어들 수 있을까? 필자는 레이어드 아키텍처만 경험을 해보고 헥사고날, DDD 를 제대로 경험한 적이 없었다. 또한 멀티 모..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bxQR1q/btssc9iXspe/wcUlDs2ZcnanGhTQ2g83G1/img.png)
비사이드 프로젝트에 13기 BE 포지션으로 참여했다. 팀 내에서 중간에 일정이 조금 딜레이가 있었어서 아직 QA 진행중이긴 하지만 그래도 좋은 경험이었기에 기록용으로 짧은 후기를 남기려고 한다. 서버 스펙 아 먼저 NCP 로 서버를 운영해가면서 서버 스펙에 대해 어떻게 구성했는지를 기록해 놓으면 다른 분들도 참고하실 수 있을 것 같아 적어보려고 한다. 처음에는 아래와 같이 가장 작은 서버를 구매해서 운영해갔는데 이는 당연히 부족했고 QA 를 시작하기 전에 서버 스펙을 올렸다. [Micro] ubuntu-18.04 vCPU 1개, 메모리 1GB, 디스크 50GB [G1] 올리기 전에 어느 정도로 구성을 하는지 궁금해서 다른 분들에게 여쭤보니 아래의 정보를 공유해주셨다. - 개발시 추천하는 최소 스펙 sta..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bmyKiz/btrWX37jtjn/kQDDHw8MoSB33kiAjLeXk1/img.png)
Spring Boot + JPA + Querydsl 적용네이버 클라우드 Global DNS, SSL 설정애플 로그인 구현(현재글) 이제 마지막으로 애플 로그인 구현한 것을 정리해보고자 한다.애플 로그인은 소셜 로그인 연동 중에서 가장 어려움이 큰 기능이다. 레퍼런스도 다른 소셜 로그인보다 부족한 편이고, 공식 문서에서 해결법을 찾기도 어려움이 있다.이번에는 이전에 구성한 여러 방법들과 더불어 주요하게 도움을 받은 여러 블로그들이 있는데 이런 전체적인 내용을 정리해보려고 한다. 애플 로그인 전체적인 구조로그인 로직을 구현하는데 이 블로그에 의하면 크게 2가지가 있다고 한다. 그 중에서 필자가 선택한 방법은 아래와 같다.그러면 가장 먼저 회원가입 요청이 들어온 뒤 App 에서 authorizationCode..