- Today
- Total
목록Category (318)
개발하는 고라니
Servicee 나 Repository에 대해 테스트 코드를 짜는 것은 조금은 익숙하나, Controller 레이어를 구성하고 테스트 하기 위해서는 Postman이나 Web UI 테스트를 진행해왔다. 이번에는 어플리케이션 수준에서 Controller 테스트를 하는 방법을 간단하게 알아보고자 한다. Environment - Junit 5 - Spring Boot 2.1.7 - JPA (Hibernate) Controller Test * Service, Repository, DTO 및 Entity에 대한 코드는 따로 명시하진 않는다. Controller에 대해 테스트를 하려면 Mock이라는 개념이 필요한데, 이에 대해서는 다음에 자세히 알아보도록 하고, 이번에는 어떻게 사용하는지만 알아보자. package ..
Querydsl Querydsl은 정적 타입을 이용해서 SQL과 같은 쿼리를 생성할 수 있도록 해주는 프레임워크이다. 또한 Querydsl은 JPQL 빌더이다. 현재 JPA를 JPQL -> Spring Data JPA -> Querydsl순으로 배우고 있다. Querydsl은 무엇이고 왜 쓰이는지, 어떻게 쓰는지 JPQL과 비교하며 알아본다. JPQL을 사용하다보면 한계에 부딪힐 때가 있다. 1) 복잡한 쿼리 - JPQL에서 복잡한 쿼리를 타이핑 중 오타가 날 수도 있고, 가독성이 떨어질 수 있다. - JPQL에서 파라미터를 .setParameter(name, value)를 통해 바인딩해야한다. - Querydsl에서 java 코드를 사용하기 때문에 컴파일 시점에 타입 체크나 오타를 잡아주어 IDE의 도..
21년 10월 말, 27살의 마무리를 준비할 쯤 첫 취준 기간이 끝났다. 전자공학을 전공했고, 1학년 때 C 언어의 벽을 느끼며 코딩은 못하겠다라고 생각했었고, 이후로도 못했다. 어영부영 지내다 군복무를 하고 돌아와서 공부를 열심히 해봐야겠다고 다짐하고 학교 공부에만 매진했다. 그거면 되는 줄 알았으나, 절대 그렇지 않았다. 모든 것을 새로 공부해야했고, 어디서부터 어떻게 시작해야할지 막막했다. 이를 느꼈을 때가 대학교 4학년 1학기였다. 당시는 개발이 뭔지도 몰랐고, 할 줄 아는 것은 자바,,,C,,,자료구조 정도였다. 개발이 하고 싶어서 유튜브와 책을 뒤지며 내가 무엇을 해야하는지 찾아다녔고, 뉴렉쳐라는 유튜브를 접하게 되었다. 이때 굉장히 도움이 많이 되었다. 나름 공부를 하고 지냈고, 막학기에는 ..
저번 달부터 프로그래머스에서 진행한 월코챌 시즌3. 총 8문제중 4문제 이상 풀면 이벤트에 응모할 수 있었다. 가까스로 4문제를 풀고 늘 그렇듯 별 기대없이 이벤트에 응모했다. 며칠뒤 뜻밖의 이메일이 한통 날아왔다. 평소 프로그래머스의 굿즈가 탐났었고 굿즈를 희망했는데 해피해킹2 ?? 처음 듣는 거였다. 그래서 당첨이 됬음에도 아쉬운 마음이 있었으나, 찾아보니 키보드였고, 그 중에서도 무접점 키보드였던 것이다. 근데 가격이 너무나도 사악했다. 이런 키보드를 내가 당첨되다니 나에게 과분한 키보드라고 생각했다. 그래도 기대되는 마음은 감출 수 없었다. 태어나서 처음으로 무언가에 당첨되었다는 사실에 그렇게 오늘 키보드를 받았는데 해피해킹 프로2와 달리 해피해킹 하이브리드 타입-s 라는 모델을 받았다. 이 제품..
Transaction 트랜잭션이란 여러 쿼리를 하나의 업무단위로 묶는 것이다. START TRANSACTION; SELECT * FROM users WHERE id = '1'; UPDATE users SET NAME = 'first' WHERE id = '1'; SELECT * FROM users WHERE id = '1'; COMMIT; Transaction의 성질 트랜잭션의 성질은 흔히 ACID라고 말한다. Atomicity(원자성) : 트랜잭션의 결과는 100% 모두 반영되거나 반영되지 않아야 한다. Consistency(일관성) : 트랜잭션의 결과는 일관성 있어야하고, 데이터베이스는 트랜잭션의 결과를 반영한 후에도 일관적이어야 한다. 여기서 일관적이란 데이터의 타입 등이 바뀌지 않는 것이다. Is..
JPA를 사용함으로써 단순 반복하는 CRUD의 SQL 작성을 획기적으로 줄일 수 있었다. 예를 들어, 테이블을 만들 때마다 Insert 쿼리, Select 쿼리, Update 쿼리, Delete 쿼리 1개씩은 대게 기본으로 SQL을 짜던 것을 JPA에서는 메서드로 가능하게 해주었다. 하지만 인간의 욕심은 끝이없다던가,, 이 간단한 CRUD 작업을 메서드로 하는 것 마저 반복을 줄일 수 없을까 고민을 하게되고, 처음에 이를 해결한 오픈소스 프로젝트를 Spring 측에서 함께 만들어 출시한 것이 Spring Data 프로젝트의 Spring Data JPA이다. 즉, Spring Data JPA를 사용한다면 간단한 저장/삭제/조회 메서드는 기본으로 장착이 되어있고, 커스터마이징 하는 것 또한 더 간편하게 할 ..
코딩테스트 연습 - 단어 변환 두 개의 단어 begin, target과 단어의 집합 words가 있습니다. 아래와 같은 규칙을 이용하여 begin에서 target으로 변환하는 가장 짧은 변환 과정을 찾으려고 합니다. 1. 한 번에 한 개의 알파벳만 바꿀 수 programmers.co.kr [DFS + 백트래킹] 시작 단어에서 목표 단어까지 최소 몇번의 변환을 거쳐 도달할 수 있는지에 대한 문제이다. 주어진 단어 배열의 각 원소를 하나의 정점(V)로 보고, 방문했는지에 대한 체크 값을 잘 사용하면 어렵지 않게 풀 수 있다. 코드가 그리 복잡하지 않고 주석이 있으므로 함께 보면 더 이해가 빠를 것 같다. Code package org.gorany.programmers.단어변환; class Solution {..
코딩테스트 연습 - 여행경로 [["ICN", "SFO"], ["ICN", "ATL"], ["SFO", "ATL"], ["ATL", "ICN"], ["ATL","SFO"]] ["ICN", "ATL", "ICN", "SFO", "ATL", "SFO"] programmers.co.kr [DFS + 백트래킹] 1) 도시에 각각 고유 번호를 부여해서 , 맵을 각각 만든다. 2) 도시 번호와 도시명이 있으니 티켓을 반복해 돌며 인접리스트를 만든다. 3) 탐색을 한다. /* * ticketSize = 주어진 티켓이 총 몇장인지? * size = 현재 티켓을 몇 장째 처리하고 있는지 * cur = 현재 방문하고 있는 도시의 번호 * */ static boolean DFS(int ticketSize, int size, ..