메시지(Message) 기능 실무를 진행하다 보면 무언가의 이름이 바뀌는 건 심심치 않게 발생한다. 예를 들어 아주 사소하지만 "상품명"이라는 단어를 "상품이름"으로 바꾸라는 지시가 내려왔다고 하자. 만약 화면 수가 수십개가 넘어가는데 일일이 모든 단어를 수정하는 것은 귀찮고 비효율적일 것이다. 스프링은 이러한 다양한 메시지를 한 곳에서 관리할수 있는 메시지(Message) 기능을 제공한다. 예를 들어 아래와 같이 messages.properties 라는 메시지 관리 파일을 만들어 관리할 수 있다. item.itemName=상품명 item.price=가격 item.quantity=수량 ... 이렇게 메시지를 관리하면 상품명을 화면에서 사용할 때 "상품명"으로 하드코딩하지 않고 "item.itemName"..
에러 상황 스프링으로 백엔드를 개발하고 포스트맨으로 API 테스트를 해보려고 했다. 그런데 스프링에서 ambiguous handler methods mapped for HTTP Method 에러를 뱉었다. 해결법 이건 한 Controller에서 매핑되는 URL이 중복되기 때문에 발생하는 에러다. 따라서 메서드들간 매핑되는 URL이 중복되는게 없는지 확인해야 한다. 특히 내 경우에는 아래와 같은 경우가 발생했다. @RestController public class SomeController{ @GetMapping("/v1/{purpose}") public ResponseDto method1(...){ ... } @GetMapping("/v1/{money}") public ResponseDto method2..
에러 상황 윈도우10에서 지원하는 원격 데스크톱 연결을 통해 특정 시스템의 개발 서버에 접속하려고 했다. 그런데 [그림 1]과 같이 'CredSSP 암호화 오라클 수정 때문일 수 있습니다.'라는 에러가 발생했다. 이 문제는 마이크로소프트에서 CresSSP 버전의 원격 코드 실행 취약성을 보완하기 위한 보안 업데이트로 인해 발생하는 것으로 보인다. 해결법 해당 오류는 근본적으로 보안 취약성을 보완해야 하기 때문에 접속을 시도하는 클라이언트와 접속하려는 서버 측 모두 윈도우 업데이트를 진행하는 게 좋다. 대부분 클라이언트와 서버의 윈도우 최신 업데이트를 통해 오류를 해결할 수 있지만, 피치 못할 사정으로 윈도우 업데이트를 진행할 수 없거나 기타 사유로 해결이 안 된다면 아래 방법을 시도해 볼 수 있다. 1)..
파킹통장이란? 파킹(Parking) 통장은 말 그대로 돈을 잠시 주차해 두기에 좋은 통장이다. 입출금이 자유로운 편이며 금리가 일반 입출금통장보다는 높은 편이기 때문이다. 나도 주식을 사기전에 현금을 확보해 두려는 용도로 파킹통장을 활용한다. 주식 계좌에 돈을 넣어놓는것보다 파킹통장의 금리가 더욱 크기 때문이다. 따라서 주식을 사고 싶을 때 파킹 통장에서 돈을 입금해 주식을 사는 전략을 사용한다. 이처럼 파킹통장은 자유로운 입출금과 꽤 높은 금리라는 장점을 활용해 여러 가지 용도로 사용할 수 있다. 물론, 돈을 한동안 꺼내지 않을 거라면 다른 상품을 활용하는게 더 높은 수익을 얻을 수 있으므로 잘 비교해 보자! 파킹통장 금리비교 시중에는 다양한 파킹통장 상품들이 있다. 어떤 상품이 무조건 좋다고는 할 수..
Bean Validation API를 개발하다 보면 DTO에 들어오는 값을 검증해야 할 때가 있다. 예를 들어 이름은 공백이면 안된다던지, 휴대폰 번호는 null이 아니 여야 한다는 등의 조건들이 있을 것이다. 이러한 검증은 Jakarta Bean Validation에서 제공하는 @NotNull @NotBlank, @NotEmpty 등의 어노테이션을 활용하면 간단하다. 어노테이션을 적용하지 않을 경우 @PostMapping(...) public ResponseEntity buy(@RequestBody BuyRequestDto buyRequestDto){ if(buyRequestDto.getName() == null){ return new ResponseEntity("Error", HttpStatus.BA..
문제 https://edu.goorm.io/learn/lecture/17301/cos-pro-1%EA%B8%89-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-java/lesson/839399/1%EC%B0%A8-%EB%AC%B8%EC%A0%9C5-%EC%86%8C%EC%9A%A9%EB%8F%8C%EC%9D%B4-%EC%88%98-java 구름HOME 구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다. www.goorm.io COS PRO 1급 기출문제 중 위 문제가 꽤 재밌어서 가져와봤다. N*N 격자에 1부터 N까지의 수가 소용돌이 순서로 있을 때 대각선상에 있는 수들의 합을 구하는 문제다. 풀이 ..
프론트 컨트롤러(Front Controller) 디스패처 서블릿에 대해 알기 위해선 프론트 컨트롤러(Front Controller)에 대해 알아야 한다. 프론트 컨트롤러는 말 그대로 모든 컨트롤러 앞에 있는 컨트롤러이다. 클라이언트의 모든 요청을 앞에서 받고 해당 요청을 처리할 적절한 컨트롤러를 결정한다. 예를 들어 사용자가 로그인을 하려고 하면 해당 요청을 프론트 컨트롤러가 받아 로그인 컨트롤러에게 넘길 것이다. 만약 사용자가 구매 요청을 보낸다면 프론트 컨트롤러는 구매 컨트롤러를 호출할 것이다. 프론트 컨트롤러의 필요성 프론트 컨트롤러를 사용하지 않고 클라이언트의 요청을 일일히 적절한 컨트롤러에 매핑시켜놓으면 어떨까? 이것은 매우 비효율적이다. 웹 서비스를 구현하다보면 필연적으로 공통 기능이 필요하기..