전체 글
[MYSQL] float, double 저장 시, 소수점이 깨지는 문제
배포된 서비스에서 점수를 소수점 입력이 가능하도록 변경해야 하는 이슈가 있었다. 현 서비스에서는 mysql + aws rds를 이용해서 운영을 하고, 로컬 테스트를 위해 h2 db에서 테스팅 하는 과정에서 문제가 발생했다. 분명 입력값으로 2.333을 넣었는데, 이런 식으로 소수부분이 깨지는 현상이 발생했다. Mysql decimal vs float(double) 결론적으로, float와 double 타입의 경우에는 부동 소수점 방식의 데이터 타입이다. 부동소수점(floating point) 방식은, 이진수에서 0과 1을 사용하여 소수를 근사해서 표현하는 방식을 말한다. 사실 부동이라는 단어에서 움직이지 않는다는 뜻이라고 유추했는데, 실제 뜻은 떠다니며 움직인다는 의미라고 한다. (뜰 부 + 움직일 동)..
[객체지향] 응집도와 결합도의 차이
객체지향의 관점에서 설계의 품질 척도를 결정하기 위해 다양한 평가 기준을 도입하였다. 그 중, 가장 대표적인 척도인 응집도(cohesion)과 결합도(coupling)의 차이를 알아보고자 한다. 응집도란(cohension)? 응집도란 모듈에 포함된 내부 요소들이 연관되어 있는 정도를 나타낸다. 다시 말해, 한 모듈 내에서 내부 요소들이 같은 목적을 추구하는지에 대한 척도이다. 모듈 내의 요소들이 동일 목적을 위해 긴밀하게 협력한다면, 높은 응집도를 가진다고 말한다. 일반적으로 응집도가 높을수록 좋은 설계라고 말할 수 있다. 결합도란(Coupling)? 결합도란 의존성의 정도를 말한다. 한 모듈이 다른 모듈에 대해 얼마나 많은 지식을 갖고 있는지를 나타내는 척도이다. 어떤 모듈이 다른 모듈에 대해 필요한 ..
[백준] 23288. 🎲주사위 굴리기 2 (파이썬)
문제 주사위 굴리기2 🎲주사위의 이동에서 획득한 점수의 합을 구해보자. 시간 제한 2초 메모리 제한 1024MB 지도의 크기 N x M 주사위 존재, 각 면에는 1 ~ 6까지의 수 중 하나가 써 있음. 주사위 한 면의 크기와 지도 한 칸의 크기는 같다. 초기 상태 주사위는 지도 위 (1, 1) 위치에 놓여 있다. 주사위는 윗면이 1, 오른쪽 면이 3인 상태로 놓여 있다. 주사위의 이동 이동 방향으로 한 칸 굴러간다 / 이동 방향에 칸이 없다면, 이동 방향을 반대 방향으로 전환 도착한 칸의 점수를 획득한다. 주사위의 아랫면에 있는 정수 A와 주사위가 있는 칸에 적힌 정수 B를 비교하여 다음 이동 방향을 결정한다. A B : 이동 방향을 시계 방향으..
[Spring] @NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor의 차이점 간단 정리.
스프링 코드를 보다 보면 항상 엔티티 클래스 위에 저 세가지 어노테이션이 종종 붙어 있는 경우를 보았다. 지난 포스트에 DI의 세가지 방법에 관한 글을 정리하고 나니 아래의 세 어노테이션을 정리할 필요성이 느껴져 해당 어노테이션들도 공부해보려고 한다! @NoArgsConstructor @RequiredArgsConstructor @AllArgsConstructor @NoArgsConstructor @NoArgsConstructor는, 매개변수를 갖지 않는 기본 생성자를 생성해준다. @NoArgsConstructor는 주로 access = AccessLevel.PROTECTED 를 설정하여 무분별한 객체 생성을 막는 용도로 쓰인다. 해당 속성을 부여하면 기본 생성자에 접근 제어가 되므로, 결국 해당 클래스..
[Spring] DI의 세 가지 방법(필드 주입, 생성자 주입, setter 주입)
먼저 DI에 대해서 다시 한번 짚고 넘어가보자면, DI(Dependency Injection)이란, 어떤 코드에서 필요로 하는 의존성을 외부에서 주입(injection)하는 방법을 말합니다. DI의 목적은 한 코드 내에서 생성과 구현의 책임을 분리하기 위함이고, 이를 통해 런타임 의존성을 갖게 되어 결합도를 낮추고 유연한 코드 설계를 가능하게 해 주는 기법입니다. DI 설명을 위해 예시 코드로 Adder(두 수를 더하는 클래스)를 작성했습니다. DI의 세 가지 방법 - 1. setter 주입 public class Adder { private int number1; private int number2; public void setNumber1(int value){ this.number1 = value; ..
[Windows] 도커 설치 시, Docker Desktop requires a newer WSL kernel version 오류 해결법
윈도우 운영체제에서 Docker를 설치하다가 Docker Desktop requires a newer WSL kernel version 오류가 뜨는 경우, 다음과 같은 경고창이 뜨면 해결 방법은 다음과 같다. 1. 윈도우 키를 눌러, 검색창에 windows powershell 검색 2. 우클릭하여 관리자 권한으로 실행 후, 화면에 wsl -- update 입력 3. 도커가 성공적으로 실행된다!
[WEB] REST API - URI 설계 규칙
결국 REST API의 핵심을 정리하자면 다음과 같다. 클라이언트 - 서버 간의 통신 방식 중 하나이다. 자원을 이름으로 구분한다. 자원과 행위를 분리하여 HTTP 메서드로 표현한다. 자원의 상태를 서로 주고 받는다. URI 란? URI(Uniform Resource Identifier)란, 직역하면 "통합 자원 식별자" 이다. Uniform : 자원을 식별하는 통합된 방식 Resource : 웹 브라우저 파일이나 이미지, 기타 리소스(식별 가능한 모든 자원) Identifier : 식별자 즉, URI란 자원을 식별하기 위한 시퀀스이며, 이는 REST에서 자원을 잘 식별하여 처리하기 위해 사용한다. 따라서, 개발자는 URI를 잘 네이밍해야 좋은 API를 만들 수 있고, 이를 위해서는 다음의 URI 설계 ..
[Web] REST API란?
사실 REST API라는 말에 대해서 정말 많이, 그리고 자주 들어 왔지만 정작 REST API를 설명해달라고 하면 뭐부터 이야기해야 할 지 정리가 잘 되지 않았다. 그래서 이번 포스트를 통해 REST API를 차근차근 정리해보려고 한다! 웹의 역사와 REST의 등장 배경 먼저 REST가 등장한 배경을 살펴보기 위해, WEB이 등장한 시점으로 거슬러 올라가자. www의 창시자인 팀 버너스 리는, 인터넷에서 정보를 공유하기 위해 정보들을 하이퍼텍스트(Hypertext)로 연결하자는 아이디어를 제시하였다. 이를 표현하는 형식을 HTML이라고 하며, 정보를 전송하는 방법을 HTTP라 이름짓고 이를 설계하는 작업에 돌입하였다. 해당 작업에 참여한 로이 필딩은 다음과 같은 생각을 한다. WEB의 세계는 너무나도 ..