java

    [macOS] sdkman 을 활용한 Java 버전 관리하기

    sdkman을 이용한 Java 버전 관리하기 로컬환경에서 개발할 때, 프로젝트마다 Java 버전이 다를 경우 매번 직접 구글링해서 원하는 Java 버전 설치 및 설정을 해야합니다. 이때, sdkman을 활용하면 편하게 Java 버전을 설정할 수 있습니다. sdkman 설치하기 # sdkman 설치 curl -s "https://get.sdkman.io" | bash source "$HOME/.sdkman/bin/sdkman-init.sh" # sdk 버전 정보가 나오면 정상적으로 설치된 것 sdk version sdkman은 macOS, 리눅스, 윈도우 환경에서 모두 사용이 가능하며, Zsh와도 호환됩니다. 유용한 sdkman 명령어 특정 버전의 언어를 설치하고자 할 경우 # sdk install [언어..

    [JAVA] 자바가 확장한 객체 지향

    들어가기 전에 이번 포스팅은 스프링 입문을 위한 자바 객체 지향의 원리(김종민 저)를 읽으면서 자바가 제공하는 객체 지향 키워드 및 연산자에 대해 정리한 글입니다. 이해한 내용을 토대로 정리한 글이기 때문에, 책으로 읽어보는 것을 권장합니다. abstract 키워드 - 추상 메소드와 추상 클래스 추상 메소드(Abstract Method)란, 선언부는 있는데 구현부가 없는 메소드를 의미합니다. 추상 메소드를 하나라도 가지고 있다면 해당 클래스는 추상 클래스(Abstract Class)로 선언되어야 합니다. 구현 내용 없이 선언만 되어 있는 메소드가 필요한 이유에 대해 알아보도록 하겠습니다. 만약 아래와 같이 Animal 클래스 배열이 존재하고 각 배열의 원소는 Animal 클래스를 상속 받은 클래스의 객체..

    [JAVA 개념] 길이 관련 메소드 사용법(length, length(), size())

    length 배열의 길이를 알고자 할 때 사용 String[] cars = {"Volvo", "BMW", "Ford", "Mazda"}; System.out.println(cars.length); // Outputs 4 length() String과 관련된 객체의 길이를 알고자 할 때 사용 - String, StringBuilder .. String txt = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; System.out.println("The length of the txt string is: " + txt.length()); size() Collection 객체의 길이를 알고자 할 때 사용 - ArrayList, Set .. List cars = new ArrayList(); cars.si..

    [Enum] enum에 연결된 값을 통해 enum값 알아내기

    들어가기 전에 enum값을 지칭하는 다른 단어를 통해 enum을 알아내고자 할 때 사용하는 방법입니다. 필자의 경우, 프로젝트를 진행하며 enum을 지칭하는 다른 단어를 통해 들어온 string을 enum으로 변환해야 해서 사용했습니다. 다른 작업을 할 때에도 쓰일 수 있을 것 같아 추후에 보기 위해 간단하게 작성했습니다. enum에 연결된 값을 통해 enum값 알아내기 아래 코드의 fromString(String name) 메소드는 enum값과 연결된 값(A)이 따로 있을 때 A를 통해 enum값을 알아내기 위한 메소드입니다. 해당 메소드를 사용하면 손쉽게 enum값을 반환할 수 있습니다. @Getter @AllArgsConstructor public enum BreadCategoryType { 식사빵..

    [SpringBoot] 게시판 만들기 v2.1 (등록/수정/조회 API 만들기)

    들어가기 전에 하기 포스팅은 스프링 부트와 AWS로 혼자 구현하는 웹 서비스(이동욱 저)를 공부하여 작성한 내용입니다. 등록/수정/조회 API 만들기 API를 만들기 위해서는 총 3개의 클래스가 필요합니다. Request 데이터를 받을 DTO API 요청을 받을 Controller 트랜잭션, 도메인 기능 간의 순서를 보장하는 Service Service에서 비즈니스 로직을 처리해야 한다고 생각할 수 있으나, Service는 트랜잭션, 도메인 간 순서 보장의 역할만 합니다. Spring 웹 계층 Web Layer 흔히 사용하는 컨트롤러(@Controller)와 JSP/Freemarker 등의 뷰 템플릿 영역입니다. 이외에도 필터, 인터셉터, 컨트롤러 어드바이스 등 외부 요청과 응답에 대한 전반적인 영역입니..

    [SpringBoot] 게시판 구현하기 20 (스프링 프로파일 적용하기)

    들어가기 전에 하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이번 포스팅에서는 스프링 프로파일 적용하는 법에 대해 알아보겠습니다. 스프링 프로파일 적용하기 스프링 웹 어플리케이션을 개발하다보면 로컬, QA, PROD 환경에 따라 핵심 로직은 동일하지만 몇 가지 설정을 바꾸어 사용하게 됩니다. 예를 들어, 데이터베이스 주소나 로그는 환경에 따라 변경됩니다. 이를 위해, 스프링에서는 프로파일이라는 기능을 제공합니다. 프로파일은 각각의 환경에 맞는 설정을 지정해 실행 또는 패키징 시 원하는 설정을 사용할 수 있도록 해줍니다. 로컬이나 QA 환경에서 사용하는 데이터베이스를 PROD 환경와 동일하게 운영하게 되면, 실제 고객 데이터를 가지고 테스트를 하게 될 수 있어 데이터베..

    [SpringBoot] 게시판 구현하기 16 (REST API로 변경하기)

    들어가기 전에 하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이전 포스팅에서는 RESTful 게시판으로 변경하는 방법을 살펴보았습니다. 앞선 구현을 가지고는 REST API를 만들었다고 이야기하기는 어렵습니다. 이번 포스팅을 통해 실제 어플리케이션 개발에서 프론트와 백엔드가 어떻게 나뉘는지 살펴보도록 하겠습니다. 일반적인 어플리케이션은 백엔드 서버와 클라이언트로 나뉩니다. 여기서 클라이언트는 웹 페이지가 될 수도 있고, 안드로이드나 iOS 앱이 될 수도 있습니다. 그리고, 백엔드 서버는 이러한 클라이언트의 요청을 수행하는 API를 만듭니다. 지금까지는 하나의 어플리케이션에서 Thymeleaf와 jQuery를 이용해 화면을 개발했습니다. 그리고, 이를 실행하기 위한 로..

    [SpringBoot] 게시판 구현하기 15 (RESTful 게시판 만들기)

    들어가기 전에 하기 포스팅은 "스프링부트 시작하기(김인우 저)" 책을 공부하며 적은 포스팅입니다. 이번 포스팅에서는 RESTful에 대해 살펴보도록 하겠습니다. REST란? REST란 REpresentational State Tranfer의 약자로, HTTP 창시자 중 한 사람인 로이 필딩(Roy Fielding)이 2000년에 발표한 박사 학위 논문에서 소개되었습니다. 로이 필딩은 기존 웹 아키텍처가 HTTP 본래의 우수성을 잘 활용하지 못한다고 생각하여 HTTP의 장점을 최대한 활용할 수 있는 아키텍처로 REST를 소개했습니다. 잘 표현된 HTTP URI로 리소스를 정의하고, HTTP 메소드로 리소스에 대한 행위를 정의합니다. 리소스는 JSON, XML과 같은 여러 언어로 표현할 수 있습니다. RES..