일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- JPA
- 그래프
- 완전탐색
- 싸피
- DFS
- 코딩테스트실력진단
- 알고리즘
- 부분수열의합2
- Spring
- SWEA
- 자바
- BFS
- 코드트리
- JUnit
- 코테
- DP
- 다익스트라
- 그리디
- 완탐
- 트러블슈팅
- 유니온파인드
- 다시보기
- Union Find
- database
- SSAFY
- 기본유형
- 알고리즘기본개념
- 코딩테스트
- Java
- 백준
- Today
- Total
목록DEV-STUDY/Spring (29)
HwangHub
자바 서블릿 자바 서블릿은 웹 통신 간 요청에 따른 응답을 동적으로 생성하는 자바 기반의 웹 어플리케이션 기술로, 흔히 "서블릿"이라 줄여 부릅니다. 여기서 말하는 웹 통신 간의 응답은 동적인 웹 페이지가 될 수도 있고, HTTP 응답 메시지일 수도 있죠. 서블릿이 하는 일을 좀 더 열거하여 말해보자면, 서블릿은 비즈니스 로직 실행을 제외하고 TCP/IP 대기 및 소켓 연결부터 HTTP 요청 메시지 헤더/바디 파싱, 그리고 HTTP 응답 메시지를 생성하여 소켓으로 전송해주는 것 까지 전부 수행하는 녀석입니다. (굉장히 많은 일을 하고 있네요) @WebServlet(name = "helloServlet", urlPatterns = "/hello") public class HelloServlet extend..
앞으로 싸피에서 myBatis를 공부할 예정인데, 지금까지는 Spring의 대표적인 ORM인 JPA에 대해서만 사용해 왔기 때문에 이와 관련된 간단한 궁금증이 생겼다. 이에 따라 간단하게 짚고 넘어가려 한다. myBatis는 SQL Mapper이고 JPA는 ORM기술이다. (즉, myBatis는 ORM이 아니다. 둘은 차이가 있다.) SQL Mapper 쿼리의 실행결과를 미리 지정하여 두고 이를 객체로 매핑하는 기술을 말한다. 즉, 쿼리를 개발자가 직접 작성해야 한다. ORM 쿼리를 개발자가 직접 작성하지 않아도 ORM에서 객체를 해석하여 쿼리를 생성해준다. (복잡한 쿼리가 필요한 경우에는 직접 작성하는 경우도 있음) ORM은 객체지향 언어와 관계형 데이터베이스 간의 패러다임 갭을 해소하고자 등장한 기술..
datasource url에 localhost:3306/mydb와 같이 입력해 뒀는데, datasource url을 해석하지 못하는 에러가 발생했다. 일단 datasource url은 정확했다. (당연히 여러 원인이 있겠지만) 사실 127.0.0.1이 localhost와 동일한 의미인데, 혹시나 하고 127.0.0.1로 해보니 연결은 되는 걸 확인할 수 있었다. 아무래도 127.0.0.1을 localhost(루프백 호스트)로 인식하는 게 제대로 동작하고 있지 않는 것 같았다. 문제 파악하기 어디서 문제가 있나 살펴보던 중 pom.xml에서 xmlns:xsi에 http://www.w3.org/2001/XMLSchema-instance로 지정되어 있었는데, xsi가 http로 지정되어 있으니까 다른 xmln..
항상 스프링부트 + gradle 조합으로 개발하다보니, maven을 이용한 프로젝트를 진행해보지 않았었다. 이번에 싸피를 하면서 myBatis와 maven 프로젝트를 하게 될 것 같은데, 이번 기회에 pom.xml 혐오를 멈춰보고자 한다. 우선, 불편함을 지우지 위해서는 어느정도 pom.xml과 서로 알아가는 시간이 필요할 것 같아서 들여다 보기 시작했다. gradle로 빌드 파일을 설정해오면서 봤던 의존성 설정이나 빌드 설정 등은 대략 이해가 가는데, project 태그의 xmlns 부분은 어색하게 느껴졌다. 따라서 이를 한번 알아보기로 했다. POM이란? POM은 Project Object Model을 의미한다. maven으로 빌드를 진행하는 프로젝트의 설정 파일을 pom.xml이라고 하여 작성한다...
Entity의 PK를 @GeneratedValue(strategy = GenerationType.AUTO)로 해두었을 때 발생한 문제이다. 이 문제는 hibernate_sequence라는 테이블에서 PK를 조회하는데 해당 테이블이 존재하지 않아서 발생한다. hibernate_sequence 테이블이란? Hibernate5는 GenerationType.AUTO로 PK 생성 전략을 설정하면 다음 순서로 처리한다. @Id로 매핑된 Entity의 Field Type이 UUID라면 UUID Generator를 사용하여 생성한다. Integer나 Long 과 같은 numerical 타입이라면 Hibernate 설정 파일을 스캔하여 identifierGenerator를 사용하고 있는지 검사한다. 만약 사용하지 않으면..
보호되어 있는 글입니다.
시나리오 구현하려는 시나리오는 다음과 같다. 로그인 창에서 비밀번호 찾기를 누르면 이메일을 입력하는 창이 나온다. 우리 서비스에서 이메일은 unique 제약조건이 걸려있으므로, 이메일을 기준으로 멤버 엔티티를 조회한다. 이메일이 유효한지는 인증번호를 통해 검증하고, 그 이후 수정하려는 비밀번호를 입력받아 DB 데이터를 수정한다. 구현 위 시나리오를 구현하기 위해 다음 사항들을 개발하였다. 회원가입/비밀번호 수정 요청 dto에 비밀번호 정규표현식을 적용하여 요청에 대한 유효성 검사 수행 json->java object로 dto를 역직렬화하기 위해 requestDto에 기본생성자 선언 멤버 엔티티 비밀번호 수정을 위한 setter를 제한적으로 오픈 영속성 컨텍스트의 더티 체킹을 활용한 엔티티 업데이트 구현 ..
질문받았던 에러를 기록한다. JPA를 활용하여 개발을 하다가 제목과 같은 SQL Error가 발생하였고, 문제의 SQL은 다음과 같다. SQL statement: insert into like (artist,date_time,item_id,item_name,raffle_state,user_id,venue,like_id) values (?,?,?,?,?,?,?,default) 이것과 유사한 에러를 나도 처음 마주했던 때를 생각하면, 도대체 SQL을 자동으로 완성해주는 data JPA를 사용했는데도 SQL Error가 뜬다는 것이 이해가 되지 않았었다. 사실 위 SQL문을 블로그에서 보면 문제가 뭔지 바로 보이긴 한다. 문제는 자바 코드를 기반으로 생성된 SQL 문에서 like 와 같은 SQL상에서 사용하는..
돌아가는 코드 짜기 아래 코드는 돌아가는 코드다. jdbc.connectJDBC(); Statement stmt = conn.createStatement(); for (String ssn : ssnList) { sb = new StringBuilder(); String sql = sb.append(baseDeleteClause).append("ssn = ").append(ssn).append(";").toString(); stmt.execute(sql); } jdbc.disconnectJDBC(); 그렇다. 원하는 현상을 구현하기 위해 개발을 하다 보면 가장 먼저 해야 할 일이 " 1. 돌아가는 코드 짜기 " 이다. 하지만 돌아가는 코드를 짜기만 하면 우리의 일은 끝인가? 아니다. 두 번째로 해야 할 일..
jdbc 프로젝트를 진행하다가 위와 같은 이슈를 마주했다. 문제 원인을 알아보니 문제의 코드는 아래 부분이였다. Statement stmt = conn.createStatement(); for (String ssn : ssnList) { sb = new StringBuilder(); String sql = sb.append(baseDeleteClause).append("ssn = ").append(ssn).append(";").toString(); stmt.executeQuery(sql); } 위 코드 중 .executeQuery()메서드가 문제다. 한번 이번 기회에 살짝 알아보자. 알아야 할 것 jdbc에서 지원하는 실행 메서드는 execute() , executeQuery() , executeUpda..