이 글은 단순한 작업 기록을 넘어, 비슷한 문제를 겪을 동료들에게 가이드가 될 수 있도록 작성하였습니다. 단순히 "배포에 성공했다" 는 결과보다, 그 과정에서 마주친 수많은 'Permission Denied' 와 '접속불가' 메시지들을 어떻게 논리적으로 해결했는지 초점을 맞췄습니다. 저와 같은 주니어 개발자분들에게 이 글이 도움이 됐으면 좋겠습니다. 대두분을 로컬 환경에서 테스트를 하고 Git 에 배포하는 과정만 하다가 실제 서비스를 24시간 꺼지지 않는 별도의 서버에 돌아가게 만들어보라는 요청에 Maven 과 Spring 기반의 프로젝트를 회사 원격 서버에 올리는 임무를 진행했습니다. Terminus 를 통해 서버에 접속하여 보안상 공용 계정이 아닌 내 전용 계정을 생성하여 작업을 진행하였습니다.톰캣..
Bean Validation검증 애노테이션과 여러 인터페이스의 모음이며 마치 JPA 가 표준 기술이고 그 구현체로 하이버네이트가 있는 것과 같다. Bean Validation 을 사용하려면 다음과 같은 의존관계를 추가해야 한다.build.gradleimplementation 'org.springframework.boot:spring-boot-starter-validation' @Data@NoArgsConstructor@AllArgsConstructorpublic class Item { private Long id; @NotBlank private String itemName; @NotNull @Range(min = 1000, max = 100000) private Integer price; @NotNul..
Filter 와 Interceptor 가 필요한 이유는 모든 로직에 대하여 인증 절차를 처리하는 Logic 이 있다면, 하나하나 등록을 하는 것 보다 한번에 처리할 수 있는 기능이 있으면 유지보수 하기 쉬워 사용하는 것이다.이렇게 애플리케이션 여러 로직에서 공통으로 관심이 있는 것을 공통 관심사(Cross-cutting concern) 이라고 한다. 필터 (Filter)필터를 적용하면 필터가 호출 된 다음에 서블릿이 호출된다.그래서 모든 고객의 요청 로그를 남기는 요구사항이 존재한다면 필터를 사용하면 된다.HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 컨트롤러 참고로 스프링을 사용하는 경우 여기서 말하는 서블릿은 스프링의 디스패터 서블릿으로 생각하면 된다. 필터 체인 (Filter Chain)..
마이바티스 MyBatis 는 JdbcTemplate 보다 더 많은 기능을 제공하는 SQL Mapper 이다.JdbcTemplate 와 비교해서 MyBatis 의 가장 매력적인 점은 SQL 을 XML 에 편리하게 작성할 수 있고 또 동적 쿼리를 매우 편리하게 작성할 수 있다.jdbcTemplateString sql = "update item" +"set item_name:itemName, price=:price, quantity=:quantity" +"where id=:id"; Mybatis update item set item_name = #{itemName}, price = #{price}, quantity = #{quantity} where id = #{id}또한 동적 쿼리도 아주 손쉽게 적용시킬..
회사에서 은행에서 쓰일 hashMap 을 구현 중 ConcurrentHashMap 을 사용할 일이 생겨 정리했습니다. ConcurrentHashMap 은 Java 에서 멀티스레드 환경에서 안전하게 사용할 수 있는 Map 자료구조입니다. ConcurrentHashMapConcurrentHashMap 은 HashMap 과 비슷한 구조인데, 여러 스레드가 동시에 접근해도 안전하게 동작하도록 만든 동기화된 Map 입니다. 이러한 ConcurrentHashMap 은 java.util.concurrent 패키지에 포함돼어 있습니다.Map map = new ConcurrentHashMap(); 왜 HashMap 을 사용하지 않는 걸까?HashMap 은 멀티스레드 환경에서 안전하지가 않습니다.두 개 이상의 스레드가 동..
자바 8 부터 람다식과 함께 사용하던 코드를 더 간결하고 강력하게 만들 수 있는 함수형 인터페이스들이 추가됐습니다.따라서 대표적인 함수형 메서드를 정리해 보았습니다.미리 들어가기에 앞서 람다 Stream 사용 시 단순 for 문 혹은 while 문 보다 성능이 떨어집니다.또한 불필요하게 너무 사용하게 되면 오히려 가독성을 떨어트릴 수 있습니다.일단 Stream 이란먼저 유용한 람다식 함수들을 배우기 전에 Stream 이란 무엇인지 간단하게 설명하겠습니다.Stream 은 데이터(리스트, 배열 등) 를 한줄(Stream)로 흘려보내면서 필요한 작업(변환,필터링등) 을 수행하는 기능입니다.쉽게 말해, 데이터를 하나씩 순서대로 흘려보내면서 변형하는 파이프라인 같은 것입니다.데이터 자체를 변경하지 않고, 가공해서..
가끔 기억이 나지 않을 때 참고하려고 정리했습니다. 자바에서는 반복문이 기본적으로 5가지가 있습니다.4가지라고 생각하실 수 있지만 Lamda 를 이용한 반복문까지 포함했습니다. 자바의 반복문for 문반복횟수가 정해져 있을때 사용하면 좋습니다.초기값, 조건, 증감식을 사용해서 반복을 제어합니다.public class ForLoopExample { public static void main(String[] args) { for (int i = 1; i 실행 결과i = 1i = 2i = 3i = 4i = 5 while 문반복횟수가 정해지지 않았을 때 사용하면 좋습니다.조건이 true 일 동안 계속해서 반복합니다.public class WhileLoopExample { public st..