Spring Boot를 이용해서 개발을 진행하면 @Transactional이란 어노테이션을 이용하여 데이터의 영속성을 지키고자 한다. 제대로 알고 사용하는 것일까? 프록시조차 모르는 나는 Spring Boot의 의도에 대로 비즈니스 로직에만 신경을 쓰는 것이었을까? 오늘은 그저 사용 중이었던 @Transactional에 대한 내 생각을 서술한 글을 쓴다. @Transactional을 제대로 이해하려면 유튜브 뉴렉처 강의가 직관적이었다. Spring 자체를 이용해본 적이 없기 때문에 Bean을 xml에 직접적으로, 프록시를 직접적으로 설정해서 AOP를 구현하는 것을 본 것이 이해가 잘 가는 부분이었다. https://www.youtube.com/watch?v=y2JkXjOocZ4&t=2s 문제는 그 다음이..

https://school.programmers.co.kr/learn/courses/30/lessons/92343 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr DFS로 문제를 푸는 것은, "2 ≤ info의 길이 ≤ 17"을 보고 알 수 있습니다. 또한 그림도 친절하게 트리임을 알 수 있습니다. 하지만 이 문제는 기존 DFS문제를 조금 달랐고, 이렇게 생각해볼 수 있다는 것을 알 수 있었습니다. 해당 글에서는 그런 점에 대해 적어보겠습니다. 기존 DFS라고 부르고 싶은 로직에서 탐색할 수 있는 노드는 자신에게 연결되어 있는 노드뿐이었습니다. 해당 문제에..

https://school.programmers.co.kr/learn/courses/30/lessons/42627# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제 설명보다는 기존 다른 코드와 다른 점을 설명하고자 한다. https://school.programmers.co.kr/learn/courses/14743/lessons/118891 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 위 링크에서 문..
새로 알게 된 것 set num(gems.begin(), gems.end()); 중요하다고 생각한 것 1. for문 한번만 돌아야 된다. 2. 도는 것을 굳이 나눠서 첫 번째 초기값을 따로 구하지 않아도 된다. 더 생각해볼 것은 하나의 케이스에 메몰되지 않고, 더 다양한 케이스에 대해서 고민해볼 것 #include #include #include #include #include using namespace std; vector solution(vector gems) { vector answer(2); unordered_map m; set num(gems.begin(), gems.end()); int start = 0; bool isFirst = true; for(int i=0; i 1) { m[ gems..
개인 프로젝트를 할 때엔 Vuejs, React 라이브러리를 기본으로 또는 이를 쓰는 프레임워크를 이용해서 개발을 진행했었다. 하지만 취직한 곳에서는 NodeJs기반의 프론트 프로젝트를 진행하지 않았고 그런 이유도 어느정도 납득 가능한 부분이었다. 백엔드 개발과 프론트 엔드 개발을 나누는 것이 좋지만, 인력이 두 배 이상으로 들 수도 있고 꽤나 여러 사람이 피곤해질 수 도 있다고 생각한다. 사수분은 리액트를 사용해본 적이 없기 때문에 왜 좋냐고 물어보았을 때 구체적인 이유를 이야기할 수 없었다. 지금은 스코프에 대한 이해가 있어서 이를 설명하겠지만 그 당시에는 제이쿼리도 다른 프레임워크만큼 나쁘지 않게 보였기에 이야기 할 수 없었다. 왜 제이쿼리가 좋아보였는가? 사실 그 이유보다는 타임리프에 대한 편리한..

https://school.programmers.co.kr/learn/courses/30/lessons/172927 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 문제의 조건을 확인 곡갱이 종류별로 5개, 미네랄 50개 생각할만한 방법 제일 완벽하고 만능인 방법이 뭘까, 모든 방법을 탐색하고, 최적의 값을 가져오면 된다. 주먹구구식으로 값 찾기 모든 방법을 탐색하는 데 탐색을 몇 번 해야하나? 곡갱이가 총 15개이기에, 곡갱이를 총 곡갱이를 모든 조합을 구한다면 15!이 되고, 이는 1e9를 넘어간다. 문제의 조건 확인하기 문제의 조건에서 미네랄이 총 5..

중첩 함수는 나쁜 아이가 아니에요 대게 함수를 중첩 해서 사용은 가능은 하지만 잘 하지 않는다. 그런 이유는 코드가 복잡해지고, 코드가 난해하다는 느낌이 들기도 하기 때문이다. 하지만 중첩 함수가 괜찮은 친구처럼 보이는 경우는 언제일 수 있을까? 내가 생각했을 때엔 응집도를 고려했을 때가 아닐까 싶다. 보통 코드에 대한 응집도를 높이기 위해 관련 있는 코드끼리 모아두려고 한다. 그래서 클래스를 사용한다고 본다. 그런데 클래스에 들어가는 함수에서, 함수를 호출하는 경우 코드가 복잡해지는 경향이 있다. 왜 그런가 싶으면 코드가 떨어져 있어 연결되어 있음을 볼 수가 없다. 그래서 코드를 파악하기 힘들다. 중첩 함수가 괜찮은 녀석인지 보기 위해 코드를 하나 봐보자. function order(menu) { co..

Java의 Iterator와 비슷한 느낌을 갖는 function이다. 표기법으로는 function 또는 function 으로 자신이 쓰고 싶은 방법대로 작성하면 된다. 왜 Iterator와 비슷한가? 보통 Iterator는 Collection에 들어가며, 내가 넣은 요소를 탐색하는 요소로 사용된다. function에도 동일하게 내가 요소(구간)을 만들어 다음 로직의 요소(구간)을 실행할 수 있도록 function을 실행 구간을 블록킹할 수 있게 된다. function* goStop() { console.log("go"); yield "Stop"; console.log("go2"); yield "Stop2"; } function* generateName() { yield 'W'; yield 'O'; yie..