동시성 문제와 데드락, 테스트와 해결, 그리고 삽질
2023. 6. 6. 21:36
JAVA
이 글은 Notion에서 더 잘 보이게 작성되어 있습니다! 여기에서 공개된 글로 보시면 편하게 보실 수 있습니다..! 개요 한정된 자원인 사물함에 대해 대여 서비스인 Cabi를 진행하면서 동시성 문제를 겪었었다. 트랜잭션과 격리수준에 대해 간략히 설명하고, 이전의 Nest.js에서 해결했던 방법과, 지금 새로이 Spring으로 포팅하면서 해결하고자 한 방법들에 대해서 써보려고 한다. (장문 주의) 동시성 문제? 유명한 문제 중 하나인 **‘식사하는 철학자 문제’**와 같이, 정해진 자원에 대해, 스레드나 프로세스가 동시적인 점유와 조작을 시도했을 때, 의도하지 않은 결과가 발생하는 것을 의미한다. 자세한 내용은 이곳을 참조하면 좋을 것 같다. 문제 상황 까비에서 서비스로 제공하는 사물함의 종류는 1인 상..
스프링에서 HTTP 요청 보내기 - RestTemplate vs WebClient
2023. 6. 1. 11:40
JAVA
블로그에 올리려고 했는데, 너무 안 예쁘게 나와서 OOPY 링크 첨부합니다.. 스프링에서 HTTP 요청 보내기 - RestTemplate vs WebClient 개요 cabi.oopy.io
Spring Security 안쓰고 AOP로 OAuth 구현하기 - 2
2023. 5. 25. 15:35
JAVA
개요 이전 글(Spring Security 안쓰고 AOP로 OAuth 구현하기 - 1) Spring Security를 사용하지 않기에, 일일히 OAuth 2.0의 인증 방식에 맞추어서 구현해야 했다. 우리 서비스의 경우, Google, 42(교육기관 내부 API)를 이용해 OAuth2.0 인증을 구현했다. OAuth 1.0과 2.0의 차이가 궁금하다면 이곳을 참고하면 될 것 같다. OAuth(Open Authorization) 2.0 동작 방식 여러 가지 동작 방식이 있는데, 우리는 일반적으로 사용하는 Authorization Code Grant(코드 권한 부여 방식)을 사용하였다. 여기서 User는 서비스 사용자(브라우저, 클라이언트)이고, Client는 서비스 서버(백엔드)라고 생각하면 될 것 같다...
Spring Security 안쓰고 AOP로 OAuth 구현하기 - 1
2023. 5. 25. 15:34
JAVA
oopy로 보시면 더 깔끔합니다! 개요 기존의 Nest.js에서 JAVA Spring으로 포팅을 진행하게 되면서, 인증 부분을 맡게 되었다. Nest에서는 Passport라는 라이브러리를 통해서 OAuth를 간단하게 구현할 수 있었지만, Spring에서 인증-인가와 관련된 부분은 대부분 Spring Security를 통해서 관리되는 편이다. Spring Security를 적용하기 전에, 우선적으로 Spring Security를 사용하지 않는 방식으로 인증-인가를 구현하고자 하였다. 시큐리티를 쓰지 않은 이유 우선, Spring Security의 러닝 커브가 높았고, 낯설은 부분(필터 체인과 같은)들이 너무나 많았다. 빠르게 구현해야하는 상황에서, 기존의 Guard를 이용한 AOP, 인터셉터와 같은 부분은..
DTO와 VO, DAO 그리고 Repository
2023. 5. 7. 21:01
Web
개요 스프링으로 백엔드를 포팅하는 과정에서, DDD에서 주로 쓰이는 VO와 기존에 쓰던 DTO의 차이, 그리고 DAO와 Repository같이 상당히 유사한 기능을 함에도 이름이 다르고 용처가 다른 것들에 대해서 그 이유가 무엇인지 궁금해졌고, 이에 대해 알아보려고 한다. DTO? DTO(Data Transfer Object)란, 프로세스 간에 데이터를 전달하는 객체다. 현재 웹 서비스에서는 주로 계층들, 특히 컨트롤러 - 서비스(표현 - 도메인) 단계에서 서로 주고 받는 데이터 양식이다. 주클라이언트에서 서버 쪽으로 전송하는 요청 데이터, 서버에서 클라이언트 쪽으로 전송하는 응답 데이터 형식으로 데이터가 전송된다. (Request && Response) 마틴 파울러의 정의에 따르면, 서비스 계층이란 어..
토큰과 세션, Stateful과 Stateless
2023. 4. 11. 14:59
Web
개요 새롭게 스프링 포팅 작업을 진행하면서, 인증 부분 구현을 맡게 되었습니다. 기존에는 간단하게만 이해하고 있던 부분들이었는데, 더 명확하게 짚을 필요가 있지 않을까 하는 생각이 문득 들었습니다. 현재 우리가 사용하는 인증 방식들에 대한 이해와 관련한 개념들에 대한 학습이 필요하다고 느꼈고, 이것들을 정리해보고자 합니다. 인증과 인가 인증(Authentication)과 인가(Authorization)는 다른 의미입니다. 인증은 접근할 수 있는 사용자인지 자격을 1차적으로 검증하는 것입니다. 42의 경우에는 42 OAuth(인트라 로그인)을 통과하는 사람들이 1차적으로 우리가 제공하는 서비스에 접근할 수 있는 ‘인증된 사용자’일 것입니다. 인가는 접근 권한을 식별하는 것입니다. 1차적으로 우리 서버에 접..
Cabi 서비스의 스프링 포팅과 DDD
2023. 4. 8. 11:17
etc.
아래 글은 이전에 작성해놓은 글입니다. 대략적인 상황은, 저희 서비스에서, 기존의 Nestjs를 사용하던 백엔드가 자바 스프링으로 포팅하는 과정에서, DDD(도메인 주도 설계)방식을 적용하기로 한 지점에서 제가 느낀 부분들을 정리하고 팀원분들과 공유하였던 글입니다. Cabi 서비스에 과연 DDD는 필요한 것인가 현재 스프링 포팅 진행을 위해 준비를 하면서 저희는 DDD를 적용하여 재설계 해보기로 했고, 서로 책도 읽고, 탐구도 하면서 스터디를 진행한 상황입니다. 하지만, 더 공부할 수록 저는 근본적으로 저희가 굳이 DDD를 적용해야 하는지에 대한 의구심이 생기고 있습니다. DDD를 적용하는 대개의 케이스들은, 미리 어떠한 프로젝트나 프로그램, 서비스를 구성하기 이전에 설계를 하는 것이 아닌, 이미 서비스..
스프링의 싱글톤과 멀티 스레딩
2023. 4. 8. 10:48
JAVA
개요 스프링 시큐리티를 사용하지 않고 인증을 구현해보는 작업을 하던 도중, 비동기적인 유저의 요청에 따라, 싱글톤을 주도적으로 사용하는 스프링이, 어떻게 각각의 컨텍스트들에 대해서 처리(멀티 스레딩)할 수 있는지 궁금해졌다. 싱글톤 싱글톤은 일종의 소프트웨어 디자인 패턴으로서, 생성자가 여러번 호출되더라도 실제로 생성된 객체는 하나이고, 최초의 생성자가 생성한 객체를 리턴하는 방식을 얘기한다. 즉, 프로그램 런타임동안 하나의 인스턴스만 사용한다는 의미이다. 장점 단일성: 단일 인스턴스를 사용하기 때문에, 메모리를 효율적으로 사용할 수 있다. 접근성: 전역에서 접근할 수 있으므로, 애플리케이션의 모든 부분에서 사용할 수 있다. 단점 객체 생성 및 관리가 객체 자체와 긴밀하게 연결되어 의존성 주입이 어려울 ..
(42 서울) 동료평가에 중용이 있을까?
2023. 4. 8. 10:45
etc.
이전에 다른 곳(42 서울)에 업로드 했던 글입니다. 42 서울이라는 곳에서는 본인이 수행한 과제에 대해서 다른 동료에게 평가를 여러 번 받고, 컨펌이 되어야 통과할 수 있는 구조입니다. 이 구조에서 일어나는 문제 상황들에 대해서 학교 수업을 듣다가 문득 생각나서 쓴 글입니다. 머릿말 이 글은 저의 인상들과 생각들을 단순히 비유들로 전달하고, 공유해보고 싶어서 작성하는 글입니다. 오랫동안 전문적으로 철학이나 프로그래밍을 배운 것도 아니므로, 명확한 개념이 아닐 수 있습니다. 단순한 주관적 지식들과 의식들을 주루룩 쓰는 것이니, 이 점 유의해주세요! 개요 저는 이번 학기에 ‘윤리학’이라는 수업을 듣고 있습니다. 제 기준에서 철학 수업의 큰 특징 중 하나가 고전을 읽고 본인이 생각해보는 것인데요. 이 수업에..
일곱 번째 회고 - 🤷♂️
2022. 12. 30. 10:30
Daily/회고
벌써 1년이 지났다. 올해 상반기가 기억이 나지 않을 정도로 열심히, 재밌게, 그리고 바쁘게 지낸 하반기였다. 내가 지금 느끼는 이 감정들이나 생각들이 상반기와는 전혀 다른 느낌의 것들이어서, 진짜 한해는 하반기 동안 보낸 기분이다. 2022년 상반기는 나에게는 힘든 날들과 방황의 연속이었다. 그리고 우연치 않게, 시작하게된 공부를 통해서 나이를 꽤 먹은 지금에야 꿈에 대한 그림이 좀 명확해졌다. 그 꿈은 특정 직업보다는, 어떤 일과 생활을 하게끔 해줄 수 있는 지에 대한 내가 원하는 직업관과 환경들이다. 바쁜 날들을 보내다가 문득 회고를 쓰기 전에 돌이켜보니, 참 받은 것도 많고, 한 것도 꽤 많고 그리고 얻은 것도 많은 한 해였다. 상반기 동안은 내가 가진 인간관계와 나 자신에 대해 돌이켜봤었지만, ..