JAVA(240)
-
콘솔 입력 객체의 역할에 맞지 않는 기능을 분리하도록 시도하기
개요 코드 스쿼드의 사다리게임을 콘솔 입력을 기반으로 구현하고 있었습니다. 제가 만든 사다리 게임에서는 사다리 게임에 참여하는 사람들의 이름과 사다리 게임의 도착지(또는 당첨 내용이라고 불림) 내용을 콘솔을 통해서 입력받아 게임을 진행합니다. 그런데 사용자로부터 콘솔 입력을 받는 객체가 부적절한 입력을 받았을때 검증하고 다시 입력받게 하거나 문자열로 입력받은 입력값들을 객체로 생성하여 반환하는 것을 하나의 메서드에서 수행하는 패턴을 발견하게 되었습니다. 이때 들었던 생각은 "사용자로부터 그저 입력을 받는 하나의 객체가 이렇게 복잡한 제어를 하는 것이 역할에 맞는가?"라는 생각이 들게 되었습니다. 따라서 이 글에서 소개하는 내용은 하나의 객체가 복잡한 과정(사용자로부터 입력받기, 부적절한 입력시 다시 입력..
2023.03.17 -
Mokito 모듈을 이용한 Random 객체 통제하기
개요 코드스쿼드 부트캠프를 하면서 사다리 게임을 구현하던 도중 Random 객체를 사용할 일이 있었습니다. 그리고 단위 테스트에서 Random 객체를 사용할 수 밖에 없었고 Random 객체의 nextBoolean() 메서드 실행시 제가 원하는 값과 순서로 반환되기를 원하였습니다. 이 글에서는 Mokito 모듈을 이용하여 Random 객체의 nextBoolean() 메서드 호출시 어떻게 하면 원하는 값(true 또는 false)을 반환하게 하고 어떤 순서로 설정할 수 있는지 알아봅니다. Random 객체를 다루면서 했던 실수 저는 보통 Random 객체를 생성할때 외부에서 생성자로 주입받는 방식이 아닌 생성자 내부에서 필드 멤버인 Random 멤버에 객체를 생성하는 방식으로 생성하였습니다. class P..
2023.03.10 -
[SpringBoot] 데이터베이스 마이그레이션(Database Migration)
1. 데이터베이스 마이그레이션이란 무엇인가 데이터베이스 마이그레이션이란 데이터베이스 스키마의 버전을 관리하기 위한 하나의 방법(데이터 전환)입니다. 개발 시스템에는 데이터베이스 스키마가 변경되었지만, 운영시스템의 데이터베이스 스키마가 변경되지 않았을 경우 마이그레이션을 수행합니다. 작게는 프로젝트 상 테이블 생성 및 변경 작업부터, 하나의 애플리케이션 또는 시스템을 옮기는 것까지 마이그레이션입니다. 요구사항에 따라 애플리케이션과 스키마가 바뀌었지만 개발 과정에는 적용됬지만 운영환경에는 적용되지 않아 데이터베이스 전환 시 애를 먹는 경우가 있습니다. 데이터베이스 마이그레이션은 이러한 문제를 해결합니다. 데이터베이스 마이그레이션은 개별 SQL 파일을 MySQL 콘솔 등에서 직접 실행하지 않고 프레임워크의 특..
2022.12.22 -
[SpringBoot] 스프링부트, mysql 데이터베이스 연결
1. 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'mysql:mysql-connector-java' 2. docker container를 사용한 MySQL 추가 우분투 운영체제에 다음과 같은 docker 명령어를 실행하여 mysql 컨테이너를 생성하여 실행시킵니다. $ docker run -p 3306:3306 —name mysql_boot -e MYSQL_ROOT_PASSWORD=1 -e MYSQL_DATABASE=springboot -e MYSQL_USER=yonghwan -e MYSQL_PASSWORD=pass -d mysql mysql_boot 컨테이너에 bash를 실행하여 들어갑니..
2022.12.22 -
[SpringBoot][WebMVC] CORS(Cross-Origin Resource Sharing) 적용
1. SOP와 CORS란 무엇인가? SOP(Same-Origin Policy) 동일 출처 정책(SOP, Same-Origin Policy)은 어떤 Origin에서 가져온 리소스와 상호작용하는 것을 제한하는 보안 방식입니다. 동일 출처 정책은 잠재적으로 해로울 수 있는 문서를 분리함으로써 공격받을 수 있는 경로를 줄여줍니다. CORS(Cross-Origin Resource Sharing) SOP를 우회하기 위한 표준기술입니다. SOP와 CORS 모두 웹 브라우저가 지원하는 기술입니다. SOP는 같은 Origin에만 요청을 보낼 수 있지만 CORS는 서로 다른 Origin끼리 리소스를 공유할 수 있는 기술입니다. 그래서 Cross-Origin 요청을 하기 위해서는 서버의 동의가 필요합니다. 만약 서버가 Cr..
2022.12.15 -
[SpringBoot][WebMVC] Hateoas
HATEOAS(Hypermedia As The Engine Of Application State)란 무엇인가 REST API를 사용하는 클라이언트가 전적으로 서버와 동적인 상호작용이 가능하도록 하는 것 클라이언트가 서버로부터 어떠한 요청을 할 때, 요청에 필요한 URL를 응답에 포함시켜 반환하는 것으로 가능하게 할 수도 있음 REST API 정의 웹 애플리케이션이 제공하는 각각의 데이터를 리소스, 즉 자원으로 간주하고 각각의 자원에 고유한 URI(Uniform Resource Identifier)를 할당함으로써 이를 표현하는 API를 정의하기 위한 소프트웨어 아키텍처 스타일입니다. REST API 구현 단계 잘 설계된 REST API의 마지막 단계가 HATEOAS HATEOAS라는 개념을 통해 자원에 호..
2022.12.13