전체 글 97

MySQL 서버가 설치된 디렉터리 찾는 방법 및 기본적인 설정 - Mac

1. Finder를 열고, 메뉴바에서 '이동 > 폴더로 이동..'을 선택한다. 2. 팝업 창에 '/usr/local/mysql'를 입력하고, "이동" 버튼을 클릭 그러면 Finder가 해당 위치로 이동하게 된다. MySQL 서버 디렉터리 구조 bin : MySQL 서버와 클라이언트 프로그램, 그리고 유틸리티를 위한 디렉터리 include : C/C++ 헤더 파일들이 저장된 디렉터리 lib : 라이브러리 파일들이 저장된 디렉터리 share : 다양한 지원파일들이 저장돼 있으며, 에러 메시지나 샘플 설정 파일(my.ini)이 있는 디렉터리 (열어봤지만 my.ini파일이 안보인다..? my.ini 파일말고 my.cnf로 저장되어 있다) 일반적으로 MySQL 서버는 단 하나의 설정 파일을 사용하는데, 리눅스를 ..

공부방/MySQL 2023.09.24

ordinal 메서드 대신 인스턴스 필드를 사용하라(아이템 35) - Enum

Enum에서 제공해주는 ordinal메서드는 해당 상수가 그 열거 타입에서 몇 번째 위치인지를 반환한다. 이런 이유로 열거 타입 상수와 연결된 정숫값이 필요하면 ordinal메서드를 사용하고 싶을 텐데 유지보수 하기 매우매우 끔찍하다 여기서 만약 새로운 상수를 모르고 앞에다 추가했다면 APPLE의 정수값이 0 => 1로 바뀌고 이미 ordinal를 이용하여 코드를 작성했다면 이곳저곳에서 컴파일은 정상적으로 작동하고 런타임때 오류를 범할 것 이다. Enum의 API문서를 보면 ordinal에 대해 이렇게 쓰여 있다. "대부분 프로그래머는 이 메서드를 쓸 일이 없다. 이 메서드는 EnumSet과 EnumMap과 같이 열거 타입 기반의 범용 자료구조에 쓸 목적으로 설계되었다." 따라서 이런 용도가 아니라면 o..

int 상수 대신 열거 타입을 사용해라(아이템 34) - Enum

자바에서 열거 타입을 지원하기 전에는 다음 코드처럼 정수 상수를 한 묶음에 선언해서 사용했다 정수 열거 패턴 단점 타입 안전 (type safety)를 보장할 방법이 없다 타입 안전이 보장되지 않아 동등연산자로 비교하더라도 컴파일러에서 오류를 잡지 못하고 런타임때 오류가 발생할 가능성이 있음 접두어를 써서 이름 충돌을 방지시켜야 한다 상수의 값이 바뀌면 반드시 다시 컴파일 해야한다 정수 상수는 문자열로 출력하기가 다소 까다롭다 문자열 열거 패턴으로 위의 문제를 해결할 수 있겠지만 문자열 값을 개발자가 하드코드 하기에 더 나쁘다 자바의 열거 타입 특징(장점) 열거타입 자체는 클래스이며, 상수 하나당 자신의 인스턴스를 하나씩 만들어 public static final 필드로 공개한다 열거타입은 밖에서 접근할..

Enum - 백기선 자바라이브스터디

Enum이란, 서로 관련된 상수를 여러개 정의할 때 사용한다. Enum(열거형)을 써야하는 이유는 다음과 같다. 허용되는 값들을 제한할 수 있다 리펙토링 시 변경범위가 최소화된다. 내용의 추가가 있어도 Enum 코드 외에 수정할 필요가 없다 자바의 Enum은 그외에 다양한 기능을 제공한다. 더 자세한 내용은 이펙티브자바에서 다루겠다 Enum 정의하는 방법 가장 기본적인 방법으로 아래와 같이 상수를 정의한다. 이제 여기서 각 상수에 가장 관련있는 값인 가격과 한국식 명을 추가하고 싶으면 생성자를 추가한다. 생성자에 변수말고도 각 상수마다 필요한 계산이 있다면 특정 상수에 함수를 관련 시키게 할 수 있다. 예를들면 삼성이 후원하는 매장에서 삼성노트북을 사면 할인을 해주는 그런 로직이 필요하다면 다음과 같이 ..

공부방/JAVA 2023.09.22

멀티스레드와 동기화 문제 - 백기선 자바라이브스터디

분명 프로젝트를 진행하면 싱글 메인스레드만을 돌리는 프로젝트를 보기가 오히려 어려울 것이다. 두 개 이상의 스레드를 돌리면서 각종 동시성 문제와 데드락을 해결하는 과정을 거치는 경험을 갖게될텐데 여기서 생기는 문제를 쉽게 해결하기 위해 이번 기회에 한번 쭉 정리하겠다. Thread 클래스와 Runnable 인터페이스 프로세스와 스레드의 차이 부터 알고 있어야 스레드를 이해할 수 있다고 생각한다. 운영체제에서 자세히 살펴볼 수 있으니 간단하게 언급만 하고 넘어가겠다 process : 프로그램이 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태 thread : 할당받은 자원을 이용하는 실행의 단위이고 프로세스 내에서 여러 개 생길 수 있다 하나의 프로세스는 코드와 데이터 영역은 여러 스..

공부방/JAVA 2023.09.20

예외처리 , 그거 어떻게 하는건데

프로그램을 실행 중 어떤 원인에 의해서 오작동하거나 비정상적으로 종료되는 경우가 있다. 이를 발생 시점에 따라 '컴파일 에러' 와 '런타임에러'로 나눌 수 있다. 컴파일 에러는 소스코드를 컴파일하면 에러를 잡아준다. 예를들면 코드 오타가 있거나 자료형을 잘못 적었거나 등 이런것은 개발자가 쉽게 바로 에러잡아주는 곳에서 고치고 다시 실행하면 된다. '컴파일에러'는 IDE에서 많이 도와주고 있으니 이번 글에서 다룰 내용이 아니다. 반면 '런타임 에러'는 상황이 다르다. 프로그램 실행 도중 발생되는 에러라 컴파일러가 에러를 잡아줄 수가 없다. 즉 개발자인 우리가 이에 대한 적절한 코드를 미리 작성해놓음으로써 프로그램의 비정상적인 종료를 막을 수 있다. 예외처리는 바로 '런타임에러'를 잡기 위한 방식이다. "컴..

공부방/JAVA 2023.09.12

[Beacon] 프로젝트 한달 차 회고

백엔드 2, 프론트 1 이서 모여진 이 프로젝트는 공개 SW 개발자 대회에 참가라는 명목으로 동기부여를 주고 사실 협업 프로젝트는 나에게는 처음이라 공부하는 겸 시작된 프로젝트이다. 먼저 진행된 프로젝트는 https://github.com/Beacon-2023/Beacon-backend 링크에서 볼 수 있고 진행은 한달안에 어느정도 완성된 프로젝트를 제출해야 하기에 스크럼으로 6주간의 스프린트로 진행했다. 해당 내용은 이 https://github.com/orgs/Beacon-2023/projects?query=is%3Aopen 링크에서 볼 수 있다 이번 회고글은 자랑하고 싶은 건 전혀 없고 (자랑할 거리가 없다;) 앞으로 해당 프로젝트를 혼자서라도 계속 진행할 수 있을 지 또는 여기서 그만둬야 할지 방..

자바 인터페이스 - 백기선 자바라이브스터디

인터페이스 정의하는 방법 인터페이스란 객체와 객체 사이에서 일어나는 상호 작용의 매개로 쓰인다. 누군가는 이를 다리 역할로 볼 수 있다고 하며 실제 구현 클래스의 설계도라고 부르기도 한다. 인터페이스의 선언은 예약어로 class가 아닌 interface 키워드를 사용하며, 메소드의 접근 제어자로는 자바8 기준으로는 public, default, static이 가능하며 자바9부터는 private도 가능해졌다 각각은 뒤에서 자세히 살펴본다 상수 : 인터페이스에서 제공한 값을 바꾸지 말고 그대로 사용 추상메소드 : 선언만 하고 실제 구현 클래스에서는 무조건 오버라이딩 하여 구현 디폴트메소드 : 인터페이스에서 직접 구현, 구현 클래스는 해당 메소드를 오버라이딩 하지 않아도 된다 스태틱메소드 : 인터페이스의 스태..

공부방/JAVA 2023.09.07

깃허브로 소스코드 관리할 때 정신줄 잡고 푸시하기

불과 일주일전 이야기이다. 코딩을 하고 아무 생각없이 gitignore파일에 중요한 파일들을 추가했으니 잘되겠지 하고 푸시해버리다가 public 레포에 api키 , aws rds 비번, firebase admin key 다 유출되버렸다. 물론 pr로 push했기에 rebase하면 되겠지 하고 1시간동안 해봤지만 커밋기록은 여전히 있었고 뒤늦게 이동욱님의 블로그 ( https://jojoldu.tistory.com/307 )를 참조해 해봤지만 diff는 되어도 여전히 기록이 있었고 reset하면 된다고 하길래 해봤지만 이미 멘탈이 나간뒤에 한거라 포기했다. 이렇게 4시간이 넘는 소중한 시간이 날라가고 결국 깃허브에 요청하고 키 새로 다 발급받고 비번도 바꿨다.. git은 여전히 너무 어렵다. 브랜치를 분기..

서버 에러를 빠르게 발견하고 해결하는 방법: 로그 분석의 핵심

프로젝트를 로컬에서 단위,통합 테스트를 하고 배포를 하면 끝인줄 알았던 나는 개발서버에서 간단한 에러가 터져도 확인하기가 번거로웠다. aws 인스턴스에서 서버를 돌렸던 나는 에러를 확인하기 위해 다음과 같은 행위를 했다.(다시는 이러지 않겠다는 마음으로 써본다) 1. vim nohup.out 실행 : 참고로 nohup은 터미널이나 세션이 종료되어도 해당 프로세스가 종료되지 않고 동작하는 방식으로 nohup 쉘스크립트에 jar파일을 실행하도록 명령어를 넣고 구동 시켰다. 그리고 nohup.out은 nohup 실행 시 log파일을 생성 시킨다. 나는 이 부분에서 굉장히 빨리 로그파일을 생성할줄 알았지만 기대와 달리 상당히 오랜 시간이 걸리며 자꾸 터미널이 멈춘다. 여기서 굉장히 시간도 빼앗기고 결국 exce..

공부방/JAVA 2023.09.02