분류 전체보기694 [Refactoring] 뒤엉킨 변경 (Divergent Change) 백기선 님의 리팩터링 강의를 들으며 요약한 내용입니다. 7. 뒤엉킨 변경 소프트웨어는 변경에 유연하게(soft) 대처할 수 있어야 한다. 어떤 한 모듈이 (함수 또는 클래스가) 여러가지 이유로 다양하게 변경되어야 하는 상황에서 이러한 모듈이 책임에 따라 잘 분리되어 있다면 변경에 대처하기가 쉽다. 예) 새로운 결제 방식을 도입하거나, DB를 변경할 때 동일한 클래스에 여러 메소드를 수정해야 하는 경우. 서로 다른 문제는 서로 다른 모듈에서 해결해야 한다. 모듈의 책임이 분리되어 있을수록 해당 문맥을 더 잘 이해할 수 있으며 다른 문제는 신경쓰지 않아도 된다. 7 - 1) 단계 쪼개기 다음과 같이 priceOrder라는 매우 다양한 역할을 하고 있는 메서드가 있다. public class PriceOrde.. BackEnd/Refactoring 2023. 1. 4. [Refactoring] 가변 데이터 (Mutable Data) 백기선 님의 리팩터링 강의를 들으며 요약한 내용입니다. 6. 가변 데이터 함수형 프로그래밍에서는 데이터를 변경할 때 복사본을 전달한다. 하지만 Java와 같은 언어에서는 데이터의 변경을 허용한다. Call By Value를 생각해보면 주소값을 전달하기에 변경여파가 크다. 따라서 데이터가 변경될 시 발생할 수 있는 여파를 관리할 방법을 적용해야 한다. 6 - 1) 변수 쪼개기 어떤 변수에 할당이 여러번 되고 있다 생각해 보자. 과연 적합한 상황일까? 다음 Rectangle 코드를 살펴보자! ▶ Rectangle public class Rectangle { private double perimeter; private double area; public void updateGeometry(double heig.. BackEnd/Refactoring 2023. 1. 3. [Spring] Spring Security에서 @WithMockUser를 커스텀하기 이번 글을 직전 글에서 발생한 문제를 해결하기 위해 @WithMockUser를 커스텀하여 사용하는 글을 작성해볼려 한다. 직전글을 꼭 읽을 필요는 없다. @WithMockUser를 커스텀하여 사용하는 방법은 이번 글만 보면된다. (다만 문제가 발생한 상황 이 궁금하다면 직전 글 도 살펴보길!) https://blogshine.tistory.com/626 [Spring] SpringSecurity에서 @AuthenticationPrincipal 대신 DTO로 받기 1. 문제의 상황 현 술술 애플리케이션에서는 로그인 한 사용자가 Controller에 접근할 때 CustomUser 객체를 인자로 전달받는다. 문제는 CustomUser가 도메인의 순수한 핵심 Entity라는 점이다... 또한 SonarQu bl.. BackEnd/Spring 2023. 1. 2. [Spring] SpringSecurity에서 @AuthenticationPrincipal 대신 DTO로 받기 1. 문제의 상황 현 술술 애플리케이션에서는 로그인 한 사용자가 Controller에 접근할 때 CustomUser 객체를 인자로 전달받는다. 문제는 CustomUser가 도메인의 순수한 핵심 Entity라는 점이다... 또한 SonarQube에서도 다음과 같이 취약지점으로 알려주고 있다. 과연 CustomUser의 모든 정보가 필요한 것일까? 아니다, 사실상 코드를 따라가며 읽어보니, id, email 2개의 값만 필요함을 알게 되었다. 따라서 이를 id, email만을 포함하는 DTO로 전달받도록 개선해 보자! 참고로, @CurrentUser는 내부에 @AuthenticationPrincipal을 갖고 있어서 Spring의 도움을 받아 마치 상속하는것 처럼 사용중이다. 이글의 목적은 @Authenti.. BackEnd/Spring 2023. 1. 2. [유스콘] 유스콘 2022 후기 후 신청자가 200명이 넘어서 추첨으로 된 것 같다. 다행히 이번에는 당첨돼서 참여할 수 있었다. 같이 할수 있었던, Ader, 후 에게도 감사의 말을 전하고 싶다! 1. 진행 세션 이번 세션에서 기술 세션들에 관심이 많았다. 민규님의 introduce to clean Architecture를 시작으로 Java 17 vs Kotlin 1.7 Unit Test Puzzler 토비의 스프링 같이 읽기 Flyway 순으로 들을 생각이었다. 다만 중간에 망나니 개발자 님과 소통하는 시간이 잡혀서 Unit Test Puzzler은 듣지 못하게 되어 조금 아쉽다. 대신 ㅎㅎ 망나니 개발자 님과 대화를 나눌 수 있어서 좋았던 시간이다. 2. 한줄 세션 후기 기술 내용 정리보다는 기억에 남는 한 줄 요약! 들으면서 타.. Life/컨퍼런스 2023. 1. 1. [LeetCode][C++/Python] 5번: Longest Palindromic Substring (260) 생각의 흐름 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 이번 문제는 2가지 접근 방법이 있다. 사실 문제를 보면 바로 떠오르는 내용은 일반적으로 DP와 LCS(Longest Common Substring)이다. 따라서 나는 1) DP로 문제를 해결하려 노력하였다. 문제를 풀고 나니 보고 있는 책 에서는 2) 투포인터를 활용한 슬라이딩 윈도우 방식을 사용하였다. 이 방식 또한 정리해볼까 한다. 1) DP방식 접근 우선 DP로 푸는 경우 DP[i][j]의 의미를 i번째 부터 j까지가 palindrome인 경우 True를 대입하도록 하였다. 따라서 재귀적으로 DP[i][j]이 palindrome이려면 DP[i+1][j-1]이 palindrome 이여야 하고, 또한 str[.. Algorithm/LeetCode 2022. 12. 29. [LeetCode][C++/Python] 49번: Group Anagrams (259) 생각의 흐름 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 문자열의 원소순으로 정렬을 하면 같은 anagram의 원소들은 같은 문자열을 갖게 된다. 이점을 이용하자. 예를 들어 다음과 같은 3개의 예시의 경우 "ate","eat","tea" 문자순으로 정렬하면 모두 "aet" 값을 갖게 된다. 이를 Map 자료형을 이용하여 처리하면 된다. 나의 코드 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 1. C++ using namespace std; class Solution { public: vector groupAnagrams(vector& strs) { unordered_map word_map; for (auto word : strs) .. Algorithm/LeetCode 2022. 12. 28. [LeetCode][C++/Python] 937번: Reorder Data in Log Files (258) 생각의 흐름 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 사실 크게 생각할 문제라기 보다는, 정렬 조건을 어떻게 잘 적용시키는지가 중요한 문제이다. C++, Python 둘다 람다를 활용하여 간편하게 정렬 조건을 전달해줄 수 있다. 이를 활용해보자! 나의 코드 " data-ke-type="html"> HTML 삽입 미리보기할 수 없는 소스 1. C++ using namespace std; class Solution { public: vector reorderLogFiles(vector& logs) { vector digits; vector letters; for (auto log : logs) { const vector &results = split(log, " ");.. Algorithm/LeetCode 2022. 12. 26. [TIL] 일일 회고 2022/12/20 요즘 한 일 1. 개인 프로젝트 최종 발표 개인 프로젝트로 진행하던 Soolsul이 전체 23팀 중에서 3등을 하게 되었다!! https://thoughtful-arch-8c2.notion.site/d3b734e1aec14504918424c070ef4f68 디자인-프론트엔드-백엔드 연계 나만의 지역 기반 커뮤니티 서비스 만들기 결과 발표 No Humble, We Numble! thoughtful-arch-8c2.notion.site 또한 토스 4년 차 분께서 피드백을 해주셨는데, 우리 술술의 백엔드가 가장 우수한 아키텍처를 만들기 위해 많은 노력을 한 것 같다고 칭찬해주셨다! 모듈을 분리시키려 노력하고, 계층을 구분하며, 같은 계층 간에 의존성을 줄이려 노력한 점이 빛을 본 것 같다! Controller.. Life/회고록 2022. 12. 20. [Spring] Feign Client 적용기 개인 프로젝트를 수행하던 도중 Kakao에 위경도를 전달하여 주소로 변환해야 하는 과정이 필요했다. 맨 처음에는 RestTemplate를 생각했지만, deprecated 되었다고 한다. 따라서 WebFlux의 WebClient 사용을 권장하고 있지만, 사실 우리의 애플리케이션에서는 비동기 처리가 필요 없다 생각되었다. https://stackoverflow.com/questions/47974757/webclient-vs-resttemplate WebClient vs RestTemplate As per spring 5: WebClient is an interface representing the main entry point for performing web requests. It has been crea.. BackEnd/Spring 2022. 12. 20. Nexters 22기 BackEnd 합격 후기 1. Nexter 22기 합격! 처음으로 IT 연합 동아리에 합격하게 되었다! 이름 부분은 가리고 ㅎㅎ, 22기에 최종 합격하였다! Nexters는 연합동아리중 명실상부한 1 tier 동아리이기 때문에 사실 지원할 때까지만 해도 합격할 줄은 몰랐다... 그도 그럴 것이... 개발자 경쟁률이 무려 13.4 : 1 .... 웬만한 중소기업 경쟁률인 것 같다? 다행히 운이 좋았던 것 같다. 2. 지원 과정 우선 자소서 기반의 서류를 통과하면 면접을 진행한다. 나 같은 경우 지난번에 좀 생각 없이 지원서를 작성한 후 지원했다가 서류에서 바로 탈락한 적이 있어서, 이번에는 서류에 시간 좀 많이 투자했던 것 같다. 면접을 준비하면서 생각해둔 5가지가 있었다. 첫 번째 내가 이 동아리가 왜 필요한지, 내가 이 동아리.. Life/Nexters 2022. 12. 14. [Jenkins] Jenkins에서 TestCotnainer가 동작하지 않는 문제 ("Could not find a valid Docker environment") 이번에 Jenkins Pipeline을 구축하여 CI 과정을 수행하던 도중, gradle test가 정상적으로 수행되지 않는 문제를 경험하였다. 1. 문제 상황 우선 다음 출력된 로그를 살펴보면 다음과 같다.contextLoads() 부터 FAILED인것으로 미루어 보았을 때 contextLoads() 부터 FAILED인것으로 미루어 보았을 때 든 생각은 2가지 였다. 1) DB와 connection이 정상적으로 연결되지 않았다. 2) TestContainer가 정상적으로 생성되지 않고있다. 처음에는 1번 문제인줄 알고 계속 properties.yml을 수정하고, 설정을 변경함으로써 해결하려 했지만... 2일동안 삽질만 하고 있었던것 같다. 다시 test를 수행하면서 log를 debug로 수행하였더니 다.. BackEnd/Jenkins 2022. 12. 14. 이전 1 ··· 4 5 6 7 8 9 10 ··· 58 다음