@Transactional 이란?
·
Programming/Spring
[ Transaction의 탄생 배경 ] 보다 복잡한 프로그램을 개발하다 보면 쿼리 한 줄로 해결할 수 없는 로직을 처리해야 하는 경우가 많습니다. 여러 개의 쿼리가 처리되는 상황에서 문제가 생겨버린다면 시스템에 큰 결함을 남기게 됩니다. 예를 들어 쇼핑몰 서비스를 구현한다고 하면 아래와 같은 로직은 한 줄로 처리하는 것이 불가능합니다. 먼저 쇼핑몰에서 상품을 구매할 때 회원의 잔여 금액이 충분한지 확인하고 잔여 금액이 상품 가격보다 높을 때 구매 로직으로 넘어가야 합니다. 그리고 상품의 재고가 있는지 확인 후에 회원의 잔여 금액을 상품 가격만큼 감소시키고 로직을 종료해야 합니다. 그런데 선택상품구매 단계에서 Exception()이 발생하여 상품이 없음에도 불구하고 있다고 판단하였거나 잔여 금액이 감소하..
@ReqeustBody와 @ResponseBody 언제 사용할까?
·
Programming/Spring
서론 스프링에서 비동기 처리를 하는 경우 @RequestBody 와 @ReponseBody 를 사용합니다. 여기서는 좀 더 자세하게, 위 어노테이션을 사용하여 어떻게 비동기 처리를 할 것인지에 대해서 배워보겠습니다. 클라이언트와 서버의 비동기 통신 처리 웹에서 이루어지는 데이터를 가져오고, 전송하는 이러한 동작들은 클라이언트(Client)와 서버(Server)간의 통신이 이루어지기 때문에 가능합니다. 예를들어 우리가 브라우저에서 검색 키워드를 입력하고 검색 버튼을 누르게 되면 검색 키워드가 클라이언트(ex. Js)를 통해 서버(ex. Java)로 전송이되며 서버에서 검색 키워드를 이용하여, 클라이언트에서 요청한 메시지를 처리하고, 응답을 만들어서 다시 클라이언트로 보내며 클라이언트는 화면에 뿌리는 역할을..
Lombok 어노테이션(Annotation)
·
Programming/Spring
접근자/설정자 자동 생성 제일 먼저 살펴볼 어노테이션은 @Getter와 @Setter 입니다. 아마 Lombok에서 가장 많이 사용되는 어노테이션일 텐데요. 예를 들어, xxx라는 필드에 선언하면 자동으로 getXxx()(boolean 타입인 경우, isXxx())와 setXxx() 메소드를 생성해줍니다. @Getter @Setter private String name; 위와 같이 특정 필드에 어노테이션을 붙여주면, 다음과 같이 자동으로 생성된 접근자와 설정자 메소드를 사용할 수 있어서 매우 편리합니다. user.setName("홍길동"); String userName = user.getName(); 또한, 필드 레벨이 아닌 클래스 레벨에 @Getter 또는 @Setter를 선언해줄 경우, 모든 필드에 ..
Spring과 Node.js의 차이
·
Programming/Spring
Spring의 특징 - POJO(Plain Old Java Object) 기반의 구성 - DI(Dependency Injection, 의존성 주입)을 통한 객체 간의 관계 구성 - AOP(Aspect Oriented Programming) 지원 - 편리한 MVC 구조 - WAS에 독립적인 개발환경 Node js 특징 - 빠른 프로퍼티 접근(Fast Property Access) - 동적인 기계어 코드 생성(Dynamic Machine code Generation) - 효율적인 가비지 컬렉션(Efficient Garbage Collection) - 논블로킹 비동기 실행 - 싱글스레드! - 서버도 구현 가능! 결론 Node.js - javascript를 이용하여 프런트엔드 개발자 진입 장벽이 낮으며, 기존 ..
[자료구조/알고리즘] Eulerian circuit(한붓그리기)
·
Algorithm/Algorithm
ContentsEulerian cirtuit(오일러 서킷)Eulerian trail(오일러 트레일)  Eulerian Circuit(오일러 서킷)오일러 서킷이라는 것은 우리들에게 한붓그리기 문제로 더 알려져 있습니다. 오일러 서킷그래프가 주어졌을 때 그래프의 한 시작점으로부터 모든 간선을 한번씩만 지나 다시 시작점으로 돌아오는 경로를 말합니다.이러한 경로가 있으려면 어떠한 조건을 만족해야 할까요?가장 많이 사용되고 있는 방법으로는 단순하게 정점의 degree를 사용하는 것입니다.degree라는 것은 위상정렬 할 때 잠시 살펴보았죠? 그 때는 indegree를 이용하였고, 여기서 degree라는 것은 정점에 연결되어 있는 간선의 수를 말합니다. 그런데 도대체 degree가 갑자기 왜나올까요? 1) 무향그래..
[자료구조/알고리즘] 비트연산을 통한 순열
·
Algorithm/Algorithm
[Algorithm] Binary Counting - 부분집합, power set 구하기void main(void){ int i, j; char arr[4] = { 'a', 'b', 'c', 'd' }; int n = 4; for (i = 0; i 12n의 값을 갖는다.원소가 n개일 경우의 모든 부분집합의 수를 의미한다.Power set(모든 부분 집합)-공집합과 자기 자신을 포함한 모든 부분집합-각 원소가 포함되거나 포함되지 않는 2가지 경우의 수를 계산하면 모든 부분집합의 수가 계산된다.i & (1 계산 결과는 i의 j번째 비트가 1인지 아닌지를 의미한다.10 진수이진수{A, B, C, D}00000 10001A20010B30011B, A40100C50101C, A60110C, ..
[자료구조/알고리즘] 재귀 함수를 이용한 부분 집합 생성 알고리즘
·
Algorithm/Algorithm
#define _CRT_SECURE_NO_WARNINGS #include #include using namespace std;vector subset;int n = 4;void search(int k){ if (k == n + 1) { for (int i = 0; i 1부터 n까지의 숫자로 만들 수 있는 부분 집합의 경우의 수를 출력하는 함수다.마지막 공집합은 빈 줄로 출력이 되기 때문에 실수로 놓치는 것에 주의한다. 우리가 부분집합을 손으로 (가지치기하여) 구할 때와 유사한 방식이라고 생각한다.다만 재귀 알고리즘은 익숙하지 않으면 코드 자체를 보고 실행결과를 예상하기가 힘들다.  아래는 n = 7 , r = 4 라고 가정..
[자료구조/알고리즘] 해시(Hash) 란?
·
Algorithm/Algorithm
Hash개념임의의 크기를 가진 데이터(Key)를 고정된 크기의 데이터(Value)로 변화시켜 저장하는 것키에 대한 해시값을 사용하여 값을 저장하고 키-값 쌍의 개수에 따라 동적으로 크기가 증가하는 associate array이다키에 대한 해시값을 구하는 과정을 hashing(해싱)이라고 하며 이때 사용하는 함수(알고리즘)를 해시함수라고 한다해시값 자체를 index로 사용하기 때문에 평균 시간 복잡도가 O(1)로 매우 빠르다해시함수위에 설명한 것과 같이 키에 대한 해시값을 만드는 함수계산이 복잡하지 않고 키값에 대해 중복 없이 해시값을 고르게 만들어 내는 함수가 좋은 함수 (충돌이 일어나지 않을수록 좋다)대표적으로 나눗셈 법(Division Method)과 곱셉 법(Multiplication Method)..