개발바닥곰발바닥
반응형
thymeleaf + Spring MVC DELETE, PUT 메소드 사용하기
JAVA/Spring 2022. 7. 1. 02:26

thymeleaf + Spring MVC DELETE, PUT 메소드 사용하기 thymeleaf로 간단한 CRUD 기능이 있는 게시판을 MVC로 개발하는 중에 컨트롤러에서 DeleteMapping이 안되는 문제가 생겨서 해결 방법에 대해서 글을 작성하게 되었다. 일단 일반적으로 태그를 통해서 request를 전송할 때 GET, POST를 제외한 메소드는 지원하지 않는다. 그렇기 때문에 아래 코드처럼 태그를 통해서 메소드 정보를 전달해야 한다. 를 삽입하면 원하는 메소드로 요청이 잘 전송된다. 그러나 더 간단한 방법이 있다. form 에서 제공하지 않는 hidden method(PUT, DELETE 등)을 사용하기 위해 HiddenHttpMethodFilter를 추가해준 뒤 th:method를 사용하면 i..

데이터베이스 명명 규칙 (Naming Conventions)
데이터베이스 2022. 6. 29. 05:35

데이터베이스 명명 규칙(Database Naming Conventions) 데이터베이스 설계 작업을 하다보면 어떻게 이름을 명명해야 올바른 네이밍 컨벤션인지 고민하게 된다. 공식적으로 정해진 규칙은 없지만 잘 정리된 글이 해외 사이트에 있어서 나름대로 정리해보려고 한다.(어차피 대부분 기업에서는 기업 내에 컨벤션이 있다고 한다.) 데이터베이스 명명 규칙이 중요한 이유 데이터베이스 구조의 수명은 길다 데이터 구조는 애플리케이션 코드보다 훨씬 오래 지속되는 경우가 많다. 데이터베이스 스키마를 변경하지 않고 새로운 애플리케이션을 개발하는 일은 드물지 않기 때문에 잘 정의된 데이터 구조와 테이블 레이아웃이 중요하다. 데이터베이스 이름은 계약이다. 데이터베이스 개체는 이름으로 참조되므로 개체 이름은 개체에 대한 ..

[MySQL] DATE, DATETIME, TIMESTAMP의 차이
데이터베이스 2022. 6. 23. 02:57

MySQL DATE, DATETIME, TIMESTAMP 차이점 Mysql에서 데이터 타입을 선택할 때, DATE와 DATETIME 간의 차이는 다들 알고 있지만 DATETIME과 TIMESTAMP 간의 차이점은 헷갈리는 경우가 많다. 그래서 오늘은 이 세 가지 타입에 대해 정리해보려고 한다. DATE DATE는 시간을 제외한 날짜를 저장하는 타입으로 기본 포맷은 ‘YYYY-MM-DD’이며, ‘1000-01-01’부터 ‘9999-12-31’까지 저장할 수 있다. DATETIME DATETIME은 날짜와 시간을 함께 저장할 수 있는 타입으로, 기본 포맷은 ‘YYYY-MM-DD HH:mm:ss’이며, ‘1000-01-01 00:00:00’ 부터 ‘9999-12-31 23:59:59’까지 저장할 수 있다. T..

Stomp WebSocket + JWT + Spring Security 채팅 구현
JAVA/Spring 2022. 5. 21. 23:39

Stomp WebSocket + JWT + Spring Security 채팅 구현 Spring에서 REST(또는 HTTP) API를 만들 때, WebSocket 프로토콜인 STOMP와 소켓을 연결할 때 JWT를 사용한 인증 방법에 대해 소개하겠다. 본 포스팅은 REST API 기준으로 작성하였기 때문에 프론트엔드단의 JavaScript 코드는 포함하지 않는다. STOMP란? STOMP는 Simple Text Oriented Messaging Protocol의 약자로, 메시지의 형식, 유형, 내용 등을 정의하여 메시징 전송을 효율적으로 도와주는 프로토콜이다. STOMP의 형식 COMMAND header:value Body COMMAND를 통해 SEND 또는 SUBSCRIBE, CONNECT 등의 명령을 지..

@Qualifier와 @Primary 어노테이션 사용법
JAVA/Spring 2022. 5. 13. 17:48

해당 포스팅은 인프런 김영한님의 스프링 핵심원리 - 기본편 강의 내용을 바탕으로 작성하였습니다. @Qualifier, @Primary 어노테이션 Spring Boot에서 어노테이션을 통해 자동으로 빈을 컨테이너에 설정하는 경우, 같은 인터페이스의 구현체 클래스 두 개 이상이 빈으로 등록되면 NoUniqueBeanDefinitionException: No qualifying bean of type 'test.a' available: expected single matching bean but found 2 위와 같이 1 개의 빈만 매칭되야 하지만 2개의 빈이 존재한다며 오류가 발생한다. 이럴 경우 Spring Boot가 어떤 빈을 주입해야 하는지 알려줘야 한다. Autowired된 field의 이름을 빈 ..

JPA Column Enum으로 관리하기
JAVA/Spring 2022. 5. 11. 00:14

JPA Column Enum으로 관리하기 회원 정보인 Member Entity에서 권한을 관리하는 state라는 필드가 있는데 기존에는 state를 String으로 사용했었다. 그런데 String으로 사용하면 생길 수 있는 문제점이 있는데, 현재 진행중인 프로젝트의 권한은 USER, ADMIN, ANONYMOUS(승인되지 않은 유저) 이렇게 세 개로 관리하는데 권한 변경하는 API에서 Request에 권한을 받을 때 잘 못된 값이 들어 올 수 있다는 위험이 존재한다. 이런 문제를 사전에 차단하기 위해 권한에 대한 Enum을 만들어 잘못된 입력 값이 들어오면 막아주도록 설계를 변경했다. ROLE Enum public enum Role { ROLE_USER("ROLE_USER"), ROLE_ANONYMOUS..

[Spring] DTO 클래스 깔끔하게 관리하기
JAVA/Spring 2022. 5. 7. 01:05

Spring DTO 파일 깔끔하게 관리하기 Spring Boot를 사용해서 Restful API를 개발하다 보니 DTO 파일이 어느새 중구난방 하게 많아져 있는 모습이 찜찜했었는데, 다른 사람들은 이런 경우에 어떻게 파일을 관리하나 찾아보던 중 좋은 글을 발견해서 적용해 보았다. DTO 파일이 많아지는 이유 예를 들어 쇼핑몰에서 상품에 대한 Entity가 있을 때, 이에 대한 DTO를 만든다고 하면, Request에 대한 DTO, Response에 대한 DTO 등 하나의 Entity에 대해서도 여러 개의 DTO가 생기게 되고 이게 각각의 클래스로 만들다 보면 DTO 파일이 많아질 수밖에 없다. 해결 방안 이렇게 많아지는 Product 도메인에 대한 DTO 클래스를 하나의 ProductDto 클래스 안에서..

[프로그래머스/JAVA] 방문 길이
알고리즘/풀이 2022. 4. 26. 21:06

문제 설명 게임 캐릭터를 4가지 명령어를 통해 움직이려 합니다. 명령어는 다음과 같습니다. U: 위쪽으로 한 칸 가기 D: 아래쪽으로 한 칸 가기 R: 오른쪽으로 한 칸 가기 L: 왼쪽으로 한 칸 가기 캐릭터는 좌표평면의 (0, 0) 위치에서 시작합니다. 좌표평면의 경계는 왼쪽 위(-5, 5), 왼쪽 아래(-5, -5), 오른쪽 위(5, 5), 오른쪽 아래(5, -5)로 이루어져 있습니다. 이때, 우리는 게임 캐릭터가 지나간 길 중 캐릭터가 처음 걸어본 길의 길이를 구하려고 합니다. 예를 들어 위의 예시에서 게임 캐릭터가 움직인 길이는 9이지만, 캐릭터가 처음 걸어본 길의 길이는 7이 됩니다. (8, 9번 명령어에서 움직인 길은 2, 3번 명령어에서 이미 거쳐 간 길입니다) 단, 좌표평면의 경계를 넘어가..

반응형