분류 전체보기 91

[ Spring ] @RequestMapping 대신 @PostMapping @GetMapping 쓰는 이유

@RequestMapping 대신 @PostMapping @GetMapping 쓰는 이유가 궁금했다. 구글링으로 여러 블로그를 찾아봤지만 "코드가 줄어들기 때문"이라는 짤막한 답변이 대부분이었다. @RequestMapping(value="경로", method=RequestMethod.GET) @RequestMapping(value="경로", method=RequestMethod.POST) 이렇게 긴 코드가 @GetMapping("경로") @PostMapping("경로") 이렇게 짧아진다는 설명이다. 참고로 @GetMapping과 @PostMapping 어노테이션은 @PutMapping, @DeleteMapping, @PatchMapping과 함께 스프링 4.3부터 등장했다. 틀린 말은 아니지만 이건 질문..

공부노트/Spring 2022.01.13

[ 카카오 API ]카카오(Daum) 주소 찾기 API 사용하기

https://postcode.map.daum.net/guide 주소찾기 API가이드 링크이며 아래는, 내용을 가져와 본 것이다. Key를 발급 받을 필요가 없습니다. 사용량에 대한 제한이 없습니다. 기업용이든 상업적 용도이든 상관없이 무료로 사용 가능합니다. 기초구역번호가 발급된 도로명 주소, 영문 주소를 확인 가능합니다. 행정안전부에서 제공하는 "도로명 주소" DB를 직접 업데이트 받고 있으므로 가장 최신의 데이터를 이용하실 수 있습니다. 하단 로고를 임의로 가릴 경우, 사용에 제약이 발생할 수 있습니다. JS API 스크립트를 임의 수정하여 사용할 경우, 사용에 제약이 발생할 수 있습니다. 본 서비스는 인터넷이 가능한 환경에서 동작합니다. 인트라넷(내부망) 환경은 공식적으로 지원하지 않으며, 별도 ..

[DATABASE] 기본키(PK), 외래키(FK)

데이터 모델링을 하며 ERD(Entity Relationship Diagram: 개체관계도)에 테이블을 만들면서 테이블간의 관계 연결에 대해 어려움을 겪었다. 요약하면 부모와 자식/ 참조하는 테이블과 참조되는 테이블로 간단하지만 실제 모델링을 하면 이러한 기준이 모호하여 구분이 어려워진다. 우선 테이블간의 관계에 대해 간단히 알아보면 1:1, 1:N, N:M(여러개랑 여러개)의 관계들이 있다. 아래 그림은 학생과 수업의 관계를 나타내는 테이블인데 다대다의 관계를 가지고 있다 위 그림처럼 여러명의 학생과 여러개의 수업을 테이블로 나타내면 경우의 수가 어마무시하게 많아져 어떤 정보를 찾을 때 매우 어려워지게 된다. 따라서 각 테이블에는 해당테이블에 필요한 정보를 나타내도록 하고 테이블 행(여러 학생 또는 수..

공부노트/DB 2022.01.06

[Database] 외래키(Foreign Key)의 사용 - 식별관계, 비식별관계

1. 외래키(Foreign Key) 상품테이블과 주문테이블이 있다고 생각해보자. 아직 두 테이블간의 관계는 정해지지않은 상태다. 두 테이블의 관계는 어떻게 될지 생각해보자. 하나의 상품은 여러 주문에서 구매할 수 있고(재고만있다면..), 하나의 주문은 여러 상품을 구매할 수 있다. 다대다(N:M) 관계라는 뜻이다. ERD상으로는 이렇게 그릴 수 있지만 보통 RDB에서 다대다 관계는 중간에 관계 테이블을 추가해서 사용한다. 주문_상품이라는 관계 테이블을 추가했다(주문 테이블이 너무 허전해서 아무렇지않은듯 속성도 추가했다.). 주문_상품 테이블은 각각 상품 테이블과 일대다, 주문 테이블과 다대일 관계를 갖고있다. 주문_상품이 없는 상품은 존재할 수 있지만 주문_상품이 없는 주문은 존재할 수 없음도 ERD에 ..

공부노트/DB 2022.01.06

[ Java ] 자바 가상 머신(JVM) 메모리 구조

자바 프로그램 특징 프로그램이 실행되기 위해서는 운영체제(OS)에게 시스템 리소스의 일부인 메모리를 할당 받아야 한다. 때문에 보통 운영체제에 종속되어 실행된다. Java 프로그램은 JVM(Java Virtual Machine)이라는 프로그램을 사용하여 운영체제에 종속되지 않고 중립적으로 실행될 수 있다. 위의 그림과 같이 일반 프로그램은 운영체제를 통하여 Hardward에 접근하기 때문에 OS에 종속적이다. 하지만 Java 프로그램은 JVM이라는 가상머신을 사용하여 운영체제에 접근하기 때문에 운영체제에 종속적이지 않다. Java의 중립적 클래스 설계를 올바르게 하여 만들어진 코드는 운영체제에 상관 없이 재사용이 가능하다. 이것을 가능하게 해주는 것이 JVM이다. 하지만 JVM이라는 중간 과정이 한번 추..

공부노트/Java 2022.01.05

[500 error] Cannot invoke "java.lang.Integer.intValue()

프로젝트 도중 db와 연동을 위해 쿼리를 날리던 중 위와 같은 오류가 발생 하였다. 원인 검색을 해도 자꾸 영어로 질문과 문답이 나와 애먹었는데(그만큼 간단한거라 물어보는이가 없는데, 이거네 하고 바로 해결 못한 나....ㅋㅋㅋㅋ) 결국 근본적인 원인은 타입 문제였는데, 가져오고자하는 값과 쿼리의 타입이 맞지 않아서 발생하였던 것이었다. 해결 위와 같이 쿼리태그에 resultType을 통해 타입을 맞게 지정해주니 문제가 간단히 해결되었다.

SQL 오류 (1265) Data truncated for column

세미 프로젝트를 만드는 중 이제 db에 테이블을 하나씩 만들고, 가장 중요한 db테이블인 공공api에서 가져온 데이터를 넣기위해 엑셀파일의 데이터를 heidiSQL에서 csv 가져오기를 통해 넣으려는 중 발생한 오류이다. 분명 인코딩타입도 확실히 정해주고 utf로 통일시키고, 행과 열도 잘맞추고 입력해줬는데 되지 않지 않아서 한참을 헤맸다. 원인 csv파일을 메모장으로 실행 시켜본 모습이다. 처음 도구 > csv문서 가저오기를 하면 제어문자 항목에 필드 종결자 구분의 기본값으로 ;(세미콜론)이 설정되어 있는데, 위의 파일을 잘보면 잘보면 각각의 컬럼의 필드들이 ;(세미콜론)이 아닌 ,(쉼표)로 구분되어 지고 있는 것을 볼 수 있다. 해결 파일의 구조를 알고보니 해결방법은 간단하였다. 필드종결자의 ;(세미..

[500 ERROR] cannot deserialize from object value

Ajax를 통해 json형태의 데이터 값을 읽어오려는 도중 다음과 같은 오류가 발생하게 되었다. 원인 및 해결 jackson library가 빈 생성자가 없는 모델을 생성하는 방법을 모르기 때문에 그 값들을 받아줄 형태로 기본 생성자가 필요하다. 그렇기 때문에 오류 해결을 위해 vo 클래스에 빈 생성자를 추가해주어야 한다. 오류해결~ 좀 더 찾다보니 @Data 와 @Builder 를 동시에 사용할 경우 일어나기도 한다고 하는데, 나는 위처럼 기본 생성자를 생성해주니 해결되었고 아마 스프링 부트를 다루게되면 저런 경우가 생길 수도 있으려나 싶지만, 아직 익히지 못한 기술들이라 이렇게 어렴풋이 기억나게 적어두고, 좀 더 배우고 익히다가 다시 오류가 나면 한번 더 깊게 찾아보자.

[Mybatis] Mybatis세팅, SQL Mapper 세팅 방법

MyBatis 설정 파일 - SQL Mapper 작성 방법 MyBatis 사용 목적 중 하나는 DAO로부터 SQL문을 분리하는 것이다. 분리된 SQL문은 SQL mapper 파일에 작성하며 DAO에서는 SqlSession 객체가 SQL mapper 파일을 참조하게 된다. 다음은 MyBatis SQL mapper 파일의 예이다. select PNO, PNAME, STA_DATE, END_DATE, STATE from PROJECTS order by PNO desc insert into PROJECTS(PNAME, CONTENT, STA_DATE, END_DATE, STATE, CRE_DATE, TAGS) values (#{title}, #{content}, #{startDate}, #{endDate}, 0..