Programming 95

Http 메세지 Content/type에 따른 스프링에서 요청 data 바인딩 방법. 2023-05-20

클라이언트에서 서버로 data를 전송하는 방법은 총 3가지로 정리 할 수 있다. 1. 요청 쿼리 스트링(query string) 으로 보내지는 경우 즉 localhost:8080/new/?name=최동훈&age=24 이렇게 클라이언트에서 보내는 경우이다. 이 방식은 HTTP 메세지 바디에 아무런 내용을 넣지 않는 GET 메서드 형식으로 보낸다. 이 방식을 사용했을때 HTTP 메세지의 Content/type은 Content-Type: application/x-www-form-urlencoded 이다. 그런데 메세지 바디에는 아무값도 들어가 있지 않는다. *여기서 나는 의문점이 생겼다. HTTP 메세지의 Content/Type이 HTML 폼 태그에 post 메서드로 전송하는 사실은 같은데, 왜 메세지 바디에..

MVC vs RestController, 서버사이드 렌더링과 클라이언트 사이드 렌더링(feat. thymleaf, React) 2023-05-16 화요일

Spotify Api 를 사용하는 프로젝트를 하는중 머릿속에 스쳐가는 의문점이 떠올랐다. 발단은 이랬다. 배포를 하기 위해서는 서버의 코드와 클라이언트의 코드가 분리되어있을텐데 어떻게 AWS EC2로 배포를 하는거지? 나는 이것에 대한 정답을 MVC구조와 RestController 구조에서 찾게 되었다. 우선 내가 그토록 지겹도록 배웠던 전통적인 스프링 MVC 구조를 설명하자면 Controller 의 return 값으로 view page를 반환하면, 해당 Controller에서 Model.AddAttribute를 통해 받았던, Model 값을 뷰 템플릿 엔진을 통해 HTML 의 화면에 data를 바인딩(데이터를 입력해주는 것) 해주고 그 결과 페이지인 .html 페이지를 HTTP response를 통하여..

IntelliJ에서 Github의 프로젝트를 받아와서 로컬에서 수행할 경우 git 명령어 순서 2023-03-22

우선, 로컬 pc 즉, 내 intellij의 프로젝트 파일에도 .git 파일이 존재해야 한다. (그래야 git remote 명령어를 사용할 수 있다.) 또한 git bash를 이용해야 편하다. ide의 기능에 의존하지 말자. 첫번째 시나리오 빈 레포지 토리(즉 깃허브에서 레포지토리를 만들어놓고 아무 작업도 안했을 경우, 내가 진행중이던 프로젝트를 해당 레포지토리로 올리고 싶을때) *주의점 절때 빈 레포지토리를 깃허브에 만들때 리드미를 넣으면 안된다. 그러면 충돌난다. 차라리 추후에 연동이 끝난후 리드미를 만들고 pull을 하자. 참고 블로그 - [IntelliJ, 인텔리제이] - GitHub,깃허브 연동(README 파일) : 네이버 블로그 (naver.com) 1. git init 으로 intellij..

Programming 2023.03.22

SQL의 group by 절의 사용이유. 2022-10-11

*공부정리 * group by 절은 집계함수를 사용하여 특정 칼럼 기준으로 select할때 용이함. 만약 group by 절을 쓴다면, group 화한 칼럼이 select 절에 존재 해야 함. 아래예시에서 semester가 무조건 select 에 존재해야함. group by 절에서의 조건은 having 절을 쓰는데 이 having 절의 뒤에는 '집계함수'가 조건으로 와야함. 일반적인 칼럼의 조건은 where 절에 주어야 함. 순서 from (테이블 명) - where(칼럼의 조건) - group by(그룹화할 칼럼) - having( 그룹화할 칼럼 각각 적용될 테이블속 칼럼의 집계함수 조건) -> select dept_name, count(course_id) from course group by dept..

Programming/SQL 2022.10.11

MariaDB를 shell 에서 CLI 환경으로 테이블 설정과정. 2022-09-27

우선적으로, 노트북에는 OS가 window라 WSL2 를 이용한 UBUNTU 20.04 LTS 버전으로 리눅스 shell을 사용하였다. shell 에서 기본적으로 ssh 명령어를 통해 접속하였다. 또한 mysql –u user_201912344 –p 명령어를 통해 Mysql에 접속하였다. 또한 Show databases를 통해 내 테이블(스키마)가 존재하는지 확인하였다. *error 현황: 그 다음에 나는 새로운 연습용(practice_SQL1) 데이터베이스를 만들려고 create database 명령어를 입력했는데, 다음과 같은 에러가 나왔다. 확인해보니 해당 에러는 루트 서버로 접속한게 아니라서, DB를 생성할 권한이 없어서 나오는 애러였다. *error 해결 : 그냥 스키마(DB)를 새로 만들어서 ..

Programming/SQL 2022.09.27

[오류 해결] Jdbc template의 RowMapper<T> 클래스 구현시 맵핑 객체 생성자 주의해서 보기.2022-02-23

우선 스프링으로 JDBC template를 이용해서, CRUD 서비스를 만드는 중, 분명 SQL 문으로 "Select * from member where Email = ?" 이렇게 잘 작성해서 DB에서 데이터를 뽑아왔다. 그런데, 이상하게 member 객체의 password와 name 멤버가 뒤바뀌어서 나오는 것이다. SQL 구문잘못도 아니고, Member클래스의 생성자를 뒤바꾸게 정의한것도 아니였다. 그런데 예기치 못한 부분에서 해결을 하였다. 바로 RowMapper 클래스의 존재였다. 우리는 일반 JDBC API가 아닌, 스프링으로 JDBC Template을 쓰는 중이다. 그래서 "조회" 를 할때는 ResultSet을 이용하는 것이 아닌, JdbcTemplate.query() 메서드를 이용한다. 이 ..

스프링으로JDBC Template을 이용한 DB연동 (JDBC API vs JDBC Template).2022-02-08

●들어가기전. 스프링으로 JDBC Template을 공부하면서, 일반 JDBC API를 썼을때와 어떤 차이점이 존재하는지, 유념하면서 공부해야지만이 JDBC Template을 완벽히 이해할 수 있다. 그러므로 내가 JDBC API를 공부할떄의 포스팅을 한번 복습하고 넘어와야 된다. 또, 진도를 나가며 계속 이 두 기술의 차이를 생각하면서 공부하면, 쉽게 머리에 들어온다. 나도 계속 비교하면서 공부할것이다. 스프링을 이용할려면, 아래의 자바 개념들을 숙지해야 한다. 람다식이란 한줄로 설명하자면, 람다식 그 자체로 익명 객체이고, 메서드이름과 반환값을 생략하여 메서드를 간단히 나나탠 것이다. 스트림은 DB에 접속해 데이터를 가공하는 SELECT 문과 비슷하게, 데이터의 가공처리를 초기단계-중간단계-마지막 단..

CRUD 서비스 만들기, SQL 페이징 쿼리의 이용(ROWNUM).2022-02-14

우선적으로 사용자에게 DB의 테이블들을 보여주기 위해서는 전부 다 보여주는 것이 아니라, 특정한 갯수대로 끊어서 보여주어야 한다. ROWNUM에 대한 자세한 설명은 내가 SQL공부할떄 작성했던 포스팅을 참고: ROWNUM을 이용한 페이징 출력, 중복제거 distinct 키워드, 문자열 자르기 SUBSTR 함수. 2021-07-29 — "꾸준하게, 지속하자" (tistory.com) select * from (select RowNUM as num, N.* from (select * from notice ORDER BY REGDATE DESC) as N ) where num between 1 and 10; 이렇게 2개의 서브쿼리를 사용하면 페이징을 구현 할 수 있다. 이유는 문법에 있다. SQL의 selec..

Programming/JDBC 2022.02.14