본문 바로가기

🌃 TIL

(24)
[TIL] 단순 참조 vs 외래키: 트랜잭션 처리에서의 선택과 고민 개요최근 사이드 프로젝트에서 PR을 진행하며 팀원에게 @Transaction 애너테이션을 사용 이유에 대해 질문을 받았다. 당시 명확한 답변을 하지 못했기에 애너테이션을 삭제하기로 했다. 하지만 이 과정에서, findBy와 save 메서드의 흐름에서 트랜잭션이 필요한 상황에 대해 다시 고민하게 되었다. 특히, findBy로 조회한 데이터가 다른 트랜잭션에서 삭제되는 경우에 대한 고민이 생겼고, 이를 해결하기 위한 방법을 찾고자 테스트를 진행했다. 결국 무결성 유지를 위해 테이블 분리 방법을 선택했다. 이런 결론을 내린 과정을 서술하고자 한다. 특정 상황에서의 트랜잭션? 기존에 findBy 메서드를 사용하여 데이터를 조회하고, sace 메서드를 사용해 데이터를 삽입하는 흐름에서 문제가 발생할 수 있는 상..
[TIL] 도메인 기반 3-Tier 구조에서 SRP 고민(feat. Facade 개념 적용) 1. 트랜잭션에 대한 문제2. 다른 Service를 묶는 Service 생성3. 왜 Facade인가?4. 마무리 개요지난 번 3-Tier 구조에서 필연적으로 발생하는 단일 책임 원칙(Single Responsibility Principle, SRP) 위배에 대해 글을 작성했다. 당시에는 트랜잭션 고려에 큰 비중을 두지 않았다. 하지만, 프로젝트를 진행하며 트랜잭션이 문제가 되었다. 해당 문제에 대해 나는 ServiceFacade라는 클래스를 생성했다. Facade 단어의 개념적 내용을 적용했다. 해당 글에서는 내가 왜 이렇게 결정내리게 되었는지 그 과정과 내 생각을 기술하고자 한다.  1. 트랜잭션에 대한 문제 지난 블로그에서 나는 Controller에서 다른 도메인 Service를 참조해서 사용하기로 ..
[TIL] 3계층 구조의 단일 책임 원칙(SRP) 위배 목차 1. 도메인-3계층 구조의 SRP 위배 2. Controller에서 여러 Service 호출 3. 마치며 개요프로젝트에서 service단을 작성하던 중 단일 책임 원칙에 대해 생각했다.현재 상황에서 어떻게 하면 단일 책임 원칙을 위배하지 않고 코드를 작성할 수 있을지에 대해 고민했다.내가 현재 상황에서 내린 결정에 대해 서술하고자 한다.  도메인-3계층 구조의 SRP 위배  현재 service의 내용을 작성하기 위해서는 1, 2번의 예외처리 때문에 팀원 구인글의 repository 호출해와야 한다. 이 과정에서 하나의 service에 하나의 repository를 호출해야되는 단일 책임 원칙이 위배된다.  Controller에서 여러 Service 호..
[TIL] REST API 설계 (feat. 계층형 vs 필터링 구조) 목차 1. RESTful API란? 2. REST API 디자인 가이드 3. 계층형 구조의 필요성: favorite 리소스의 역할과 관계 4. 마무리 개요사이드 프로젝트에서 API의 엔드포인트를 설계하면서 많은 고민을 했다. 나는 다음과 같은 고민을 했다.그럼 RESTful API란 어떤 건가?지금 진행 중인 프로젝트에서는 어떻게 적용할 수 있는가?고민해 봤을 때, 겹치는 엔드포인트가 있다면 어떻게 해야 하는가?이번 글에서 RESTful API가 정확히 무엇이고 어떻게 적용할 수 있는지 기술한다. 또한, 현재 진행 중인 사이드 프로젝트에서 엔드포인트 설계과정을 서술한다. 특히, 계층형과 필터링 그리고 리소스 역할을 중점적으로 살펴본다.  RESTful API란? RESTful API란, 두 컴퓨터..
[TIL] 검색+필터 기능 설계 시 고려할 점 (feat. DB, API) 목차 1. 검색과 필터 2. DB 3. API 설계 4. 성능 최적화 들어가며고민하게 된 배경사이드 프로젝트를 시작하면서 검색 기능을 맡았다.설계 시에 어떤 걸 고려해야 되는지 알아보며 그 과정을 기록한 글이다.간단한 내용 요약해당 글은 검색과 필터의 차이를 비교하며 시작한다. DB에서는 어떤 테이블과 속성이 사용되는지 정의한다. 또한, 인덱스의 사용 예를 간략하게 명시한다. 그후 api를 설계하며 살펴봐야 할 4가지 포인트를 짚어준다. 정렬, 페이징, 동적 쿼리 비교분석과 RESTful API의 쿼리파라미터이다. 마지막으로 성능 최적화를 할 수 있는 방법이 무엇이 있는지 기술한다.   1. 검색과 필터 검색과 필터가 함께 사용되는 경우가 대다수다. 검색 기능에 대해 고민하..
윈도우 환경에서 Python 크롤링 작업 자동화 (feat. PowerShell, 작업 스케줄러) 목차1. 환경 준비2. 가상환경 설정 및 패키지 설치3. MySQL 설정 및 데이터베이스 구성4. 환경 변수 관리5. PowerShell 스크립트 작성6. bat 파일 생성7. 작업 스케줄러 시작 들어가며크롤링 작업을 주기적으로 실행하려면 자동화가 필요하다.특히 일정한 시간에 크롤링 작업을 반복적으로 수행해야 할 경우, 이를 수동으로 처리하는 것은 비효율적이고 번거로울 수 있다. 이 글에서는 윈도우 환경에서 Python을 활용한 크롤링 작업을 자동화하는 방법을 다룬다.PowerShell 스크립트와 작업 스케줄러(Task Scheduler)를 활용해, Python 크롤링 스크립트를 정기적으로 실행할 수 있도록 설정하는 방법을 단계별로 설명한다. 이를 통해 서버나 개인 컴퓨터에서 매일, 매주 반복되는 작업을..
[TIL] 나는 왜 Java Spring Boot를 사용했을까? 2024.09.05.(수)나는 왜 Java Spring Boot를 사용했을까 ❓Java Spring Boot를 선택한 이유는 취업이었다.그 전에는 애초에 직무도 백엔드가 아니었고 많은 과정을 거치면서 Java Spring Boot를 선택했다.처음 일주일 속성으로 Python을 이용한 백엔드를 배웠고 이렇다 할 공부도 하지 못했으며, 결과물도 없었다.그 후 졸업 작품 때 Kotlin으로 Android Studio를 통한 애플리케이션 개발을 했다. Kotlin을 선택한 것은 그 당시 선호도가 높으며 자료가 많다고 판단해서 선택했으나 실제로 개발하면서 Java에 대해 남아있는 자료가 많아서 프로젝트를 변경했던 것 같다. 그 후 팀 내에서 각자 서로의 방향이 달랐고 남은 졸업 작품을 위해 새로운 팀을 만들었다...
security 유효성 검사에서 403 error 면담(질문)문제 상황 : 백오피스(ADMIN권한) 일 때, 유효성 검사 예외처리를 했으나 403 error로 뜨고 유효성 검사가 안됩니다.해결 방법아래의 코드는 WebSecurityConfig 클래스의 securityFilterChain 함수이다.주석 처리된 부분을 추가하면 된다. http.authorizeHttpRequests( (authorizeHttpRequests) -> authorizeHttpRequests .requestMatchers(PathRequest.toStaticResources().atCommonLocations()).permitAll() .requestMatchers("/users/login", "/users/signup", "/api/users/re..