본문 바로가기

분류 전체보기

(67)
[Spring, QueryDSL]기본 테스트 데이터 생성 TestInitData 클래스는 BeforeEach를 대신하여 Test를 실행할 때마다 새로운 테스트 데이터를 생성하는 클래스이다. → 초반 데이터를 관리할 수 있는 클래스 TestInitData 클래스를 사용하는 이유? BeforeAll를 사용하게 된다면 테스트 클래스를 생성할 때마다 새로운 BaforeAll 메서드를 생성해야 한다. 어떠한 테스트를 실행하건 최초 한번만 세팅해야 하는 데이터를 미리 만들어 두기 위해 사용한다. → 공통의 테스트 데이터는 TestInitData를 사용하고, 각각의 클래스에서 추가해야 할 테스트 데이터는 BeforeEach로 사용한다. 코드를 보자. @Configuration @Profile("test") // 이 클래스가 정의된 Bean들은 test모드에서만 활성화 pu..
[Spring]QueryDSL 적용하기 Query DSL이란? Spring에서 JPA는 기본적으로 제공하는 CRUD 메서드나 쿼리 메서드 기능이 있는데, 원하는 조건을 만들기 위해서는 복잡하게 로직을 만들 수 있어도, 쿼리 문자열이 상당히 길어진다. 또한 원하는 조건을 얻기 위해 JPQL을 작성하게 되는데, JPQL 문자열에 오타 혹은 문법적 오류 발생 시 로딩에서는 발견할 수 있으나, 그 외에서는 런타임 시점에서 에러가 발생된다. 이 문제들을 해결하기 위해 QueryDSL이 만들어졌다. 이는 정적타입을 이용해 SQL 등 쿼리를 생성해주는 오픈소스 프레임 워크이며 1. 문자가 아닌 JAVA 코드로 쿼리를 작성하여 컴파일 시점에서 문법 오류를 발견 가능. 2. 동적 쿼리 작성 3. 자동 완성 기능 사용 가능 등 장점이 존재한다. 하지만, Que..
[Spring]기능 - 검색 이제 지금까지 진행한 커뮤니티에서 글 제목, 내용, 글쓴이, 댓글 내용, 댓글 작성자로 검색할 수 있는 기능을 만들어보자. 여기서 가장 중요한건 SQL의 쿼리문이다. 쿼리문으로 우리가 지금까지 작성한 question과 answer의 정보를 불러와 보여줄 수 있다. 첫번째로 쿼리문을 알아보자. 1. 제목 검색하기 제목을 검색해보자. SELECT * FROM question WHERE subject like '%sbb%'; 이 쿼리문을 보면 question의 모든 컬럼값을 불러오는데, where절로 제목에서 sbb가 포함된 question을 추출한다. subject 컬럼에서 sbb가 포함되어 있는 내용을 추출한 것을 볼 수 있다. 와일드카드? where절에서 사용된 '%'가 있다. 이것은 바로 와일드 카드라..
[프로그래머스(LV2), JAVA]오픈채팅방 문제를 보자 문제가 너무 길다.... 근데 단순한 문제라 생각이 들었는데, 약간에 트릭이 있어보였다. 닉네임을 바로 출력해 주는 것이 아닌, uid에 따라 이름을 설정해 주면 되지 않을까 했다. 한번 내가 생각한 알고리즘을 보자. 채팅을 넣을 List와 uid를 키값으로, name을 value값으로 하는 Map을 만든다. for문을 사용해 입력값(record)을 하나씩 받아 StringTokenizer를 사용하여 entrance, uid, name으로 나누었다. → 여기서 record는 "entrance uid name" 으로 이루어진 값들을 얘기한다. 여기서 주의할 점은 Leave가 나온다면 어차피 등록된 uid이기 때문에 따로 name을 지정해 주지 않아도 된다. (Change는 name을 등록하는 ..
[Spring]기능 - 앵커(anchor) 스프링 부트에는 자신이 원하는 답변을 작성하고, 다시 스크롤을 내리지 않아도 자동으로 스크롤이 내려가는 기능을 만들 수 있다. ajax같은 비동기 통신으로도 가능하지만, 더욱 쉽게 원하는 위치로 이동시킬 수 있다. 만들어보자. 1. 답변 Anchor 추가 바로 이동할 수 있도록 a 엘리먼트를 넣는다. 여기서 th:id="" 는 th:each 구문에서 id를 다르게 구분하는 전략으로 answer의 id값을 넣어주었다. 이를 통해 answer.id 부분으로 바로 이동할 수 있는 것이다. 2. AnswerController 수정 답변을 수정하고 다시 이동할 때 구분했던 id값으로 바로 이동할 수 있도록 위 답변 anchor을 이용했다. Answer answer = this.answerService.create..
[LINUX]wget VS curl wget과 curl은 웹 서버로부터 컨텐츠를 가져오는 명령어로써 접속이 서버 자체 문제인지, 보안 설정 문제인지 알 수 있다. 비교 공통점 바로 HTTP, HTTPS, FTP 프로토콜을 통해 컨텐츠를 다운가능 → html파일을 다운받아 어떻게 작성되어 있는지 확인할 수 있다. 쿠키 지원 Post request 지원 등 … 차이점 wgeto 별도의 라이브러리 지원 안함 o 재귀적으로 다운로드(페이지 내용 모두 다운로드) o 간단하고 직관적 curlo stdin or stdout 등 pipe 이용 전통적인 unix 스타일 방식 사용 가능o SSL 지원 o 양방향 o libcurl 라이브러리로 더 강력한 기능 추가 사용 가능 배운 내용 각 명령어를 사용해 접속이 외부 or 내부에서 문제인지 확인할 수 있다. ..
[Spring]기능 - 추천 기능 다음은 추천할 수 있는 추가기능이다. 질문과 답변에 대한 추천수가 높으면 추천수 높은 순 혹은 인기 게시물과 같이 분류할 수 있지 않을까? 기능을 만들어보자. 1. 엔티티 변경 엔티티를 수정해야 한다. 추천인을 넣을 컬럼을 만들어야 한다. @ManyToMany Set voter; 하나의 사람이 여러 게시물을 추천할 수 있고, 하나의 질문에 여러 사람이 추천을 할 수 있다. 질문과 추천인은 대등한 관계로 @ManyToMany를 사용했다. 또한 List가 아닌 Set을 사용한 이유는 추천은 한 사람이 중복으로 투표할 수 없기 때문에 중복이 되지 않은 List은 Set을 사용했다. 2. 버튼 생성 html파일을 수정하여 버튼을 생성해보자. 추천 수정 및 삭제 기능과 같이 script를 사용하는 코드이다. cl..
[프로그래머스(LV2), JAVA]문자열 압축 문제를 보자 입력받은 문자열이 연속된 숫자만큼 앞에 숫자를 적고 뒤에 연속된 문자열을 넣어주는 식의 문제이다. 중복된 문자열을 삭제하고, 연속된 만큼 숫자를 적어주면 가장 짧은 길이의 문자열이 되는데, 그 길이를 반환해주면 된다. 예시를 보자. 입력값 #2 에서 "ababcdcdababcdcd"는 총 16자리의 문자로, 8개의 문자로 잘라주면 ababcdcd가 2번 연속나오기 때문에 "2ababcdcd"가 되어 총 길이가 9인 문자열이 된다. 그러면 어떻게 풀어나가면 좋을까? 일단, 하나부터 문자열의 길이의 반만큼까지 문자열을 잘라 비교해본다. 만약 입력값 #2를 예시로 들면, 1개의 문자로 나누어 버리면 다음 b와 비교 후 그 다음 a를 다시 그 다음 값과 비교해야 한다. 그렇기에 다음 시작값에 문자를..