본문 바로가기

전체 글13

[데이터베이스] Flyway란 무엇일까? 회사에서 회사 오기 전까지 공부해야되는 기술 스택중에 데이터베이스 마이그레이션 툴인 Flyway 에 대하여 공부를 하려 합니다. 예전에 토스 컨퍼런스인 SLASH-22 를 보다가 Flyway를 봤던 기억이 있는데 그냥 어렴풋이 '데이터베이스 마이그레이션 툴' 이구나~ 만 알고 넘겼었는데 이제 제가 직접 사용해야하니 딥하게 공부를 해야될것 같았습니다. 지금 와서 '데이터베이스 마이그레이션 툴' 이라는 단어를 보니 데이터베이스를 어떻게 마이그레이션 하는지도 머리속에서 상상이 안가서 구글링과 영상을 통하여 알게 되었습니다. Flyway란 무엇일까요? Flyway는 데이터베이스을 마이그레이션 할 수 있는 툴 입니다. 무슨 말인지 모르시겠다구요? 저도 처음에 봤을때는 무슨 말인지 몰랐습니다. 제가 알고있는 마이그.. 2022. 8. 6.
[스프링] Kotlin + JPA 를 사용하면서 생긴 이슈 ( No-args ) 최근에 Kotlin 공부를 시작을 했습니다. Kopring(Kotlin + spring)을 사용하기 위해서 입니다. 간단하게 JPA를 사용해보려고 했는데 엔티티를 생성하는 과정에서 에러가 발생해서 이를 해결했던 과정을 기록하려합니다. 에러내용 : Class '클래스명' should have [public, protected] no-arg constructor 간단하게 JPA 를 사용해보려고 build.gradle.kt 에 implementation("org.springframework.boot:spring-boot-starter-data-jpa:2.7.2") 이렇게 jpa 의존성도 추가하고 자바에서 하던것처럼 UserEntity 엔티티를 생성을 했습니다. 생성을 했는데 클래스 명에서 자꾸 에러를 뱉어서 .. 2022. 7. 26.
[NestJS] Spring 사용하는 사람의 NestJS 체험기 안녕하세요. 오랜만에 Spring 사용하는 사람의 NestJS 체험기 라는 제목의 포스트를 작성해 보려합니다. 갑자기 NestJS ? 학교에서 서버(백엔드)개발을 할때 사용하는 프레임워크,언어 는 주로 'Spring Boot(Java)', 'NestJS(TypeScript)', 'Django(Python)' 으로 개발을 하는데요. 친구들 마다 다른 프레임워크,언어 로 개발을 했습니다. 제가 Spring Boot 를 선택하게 된 이유는 대한민국 업계의 대부분의 서버는 Java로 이루어져있다는 글을 보았었고, Java 가 객체지향 언어의 끝판왕이라고 불려서 기왕 할거면 멋진 기술사용해보고 싶어서 시작하게 되었습니다. ( 다른 친구들 또한 저와 같은 이유로 많이 Spring Boot 를 공부했습니다. ) 하지.. 2022. 6. 18.
[스프링] 스프링에서의 트랜잭션 관리 저번에 데이터베이스의 트랜잭션에 대하여 공부를 했었는데요. 앞서 말한대로, 이번에는 스프링에서의 트랜잭션에 대해 개념을 공부하고 코드와 함께 봐보겠습니다. https://coding-jun.tistory.com/2 [데이터베이스] 트랜잭션 이란? 트랜잭션 이란? 트랜잭션 ( Transaction ) 이란, 데이터베이스의 상태를 변화시킬때 수행하는 작업의 단위를 뜻합니다. 데이터베이스의 상태를 변화시킨다는 것은 SQL 쿼리를 이용하여 데이터베이스 coding-jun.tistory.com 트랜잭션이란 ? 위 링크를 잘 안보셨을 분들을 위하여 짧게 나마 설명을 드리자면, 데이터베이스에 SELECT,INSERT,UPDATE,DELETE 문 등의 쿼리를 날림으로써 데이터베이스의 상태를 변화시키는 작업의 단위를 일.. 2022. 5. 17.
[로깅] 로깅 #3 이번 포스팅은 저번 포스팅(로깅 #2 편)에 이어 Spring 을 이용하여 로깅 프레임워크를 사용하는 예제를 가져와봤습니다. 로깅은 이번편이 마지막 편 입니다. 프로젝트 생성 스프링 프로젝트를 생성할 수 있는 start.spring.io 혹은 IntelliJ 에서 프로젝트를 생성해줍시다. 의존성(라이브러리) 관리 이번편은저번 편보다 예제가 쉬울겁니다. 왜냐하면 spring 은 기본적으로 로깅프레임워크가 세팅되어 있기 때문이죠. 이런걸 보면 정말로 스프링을 개발하신 개발자분들이 존경스럽고 감사함을 느낍니다. 그래서 이번에는 스프링 프로젝트를 처음 생성했을때 세팅되어있는 의존성(라이브러리) 를 제외한 spring boot-starter-web 만 추가해주겠습니다. 예제는 간단하게 localhost:8080.. 2022. 5. 9.
[로깅] 로깅 #2 이번 포스팅은 저번 포스팅(로깅 #1 편)에 이어 Slf4j 의 동작과정과 순수 자바 코드로 로깅을 해보는 예제를 가져와 봤습니다. SLF4J 란 Simple Logging Facade For Java 의 약자로 다양한 로깅 프레임 워크에 대한 추상화(인터페이스) 를 제공하는 라이브러리 입니다. Slf4j 단독으로 사용이 불가능하며, 로깅 프레임워크를 Binding(연결) 하여 로깅 코드를 수행하는 과정을 거칩니다. Bridge : 다른 로깅 API로의 logger 호출을 SLF API로 연결 ( 이전의 레거시 로깅 프레임워크를 위한 라이브러리 를 연결할 수 있게 함 ) SLF4J API : 로깅에 대한 추상 레이어(인터페이스) 제공 ( 하나의 API 모듈에 하나의 Binding 모듈 ) Binding .. 2022. 5. 5.
[로깅] 로깅 #1 로깅? 프로그램이 동작시 발생하는 일을 기록하는 행위 입니다.  로그를 남기는 이유? 로그는 왜 남길까요? 로그는 서버를 운영하는데에 있어 가장 중요한 요소 입니다. 왜냐하면 운영 환경에서는 어떤일이 일어날지 아무도 모르기 때문입니다. 로깅을 함으로써 잘못된 부분을 고치고 디버깅을 할 수 있는 요소가 됩니다. 그렇다면 로그에는 어떤내용을 담아야할까요? 언제, 어떤 내용을 로깅 해야할까요? 사실 언제, 어떤 로그를 남겨야할지 답은 정해져 있지 않습니다. 프로젝트의 성격에 맞게 또는 팀에 맞게 혹은 요구사항에 맞게 로깅을 해야합니다. 한마디로 로깅 시점은 때에 따라 다르다는 것 입니다. 어떤 내용을 로깅해야할지 알려드릴 수는 없지만 주로 어떤내용이 들어가는지는 알려드릴 수 있습니다. 크게 서비스 동작상태,.. 2022. 5. 5.
[자바] Thread 와 동시성 문제 저번 포스팅에는 Thread 와 Proccess 의 개념에 대해 알아보았는데요. https://coding-jun.tistory.com/6 [코딩 지식] Process 와 Thread 프로세스 프로그램(ex. Chrome, KaKaoTalk, IntelliJ, Slack 등등.. )이 동작을하면 프로세스가 되어 메모리에 올라가서 실행이 됩니다. 이때 OS 혹은 다른 프로그램에서 프로세스가 한개가 아닌 여러개가 coding-jun.tistory.com 이번에는 저번 포스팅에서 말한것과 같이 자바에서의 Thread 와 동시성 문제를 예시 와 함께 알아보고, 제가 프로젝트를 하면서겪었던 동시성 이슈에 대해 공유해 보려 합니다. 예시로 설명드리겠습니다. 티켓팅 예시 시나리오. 두명의 사용자씩 10개의 티켓을 차.. 2022. 4. 30.
[코딩 지식] Process 와 Thread 프로세스 프로그램(ex. Chrome, KaKaoTalk, IntelliJ, Slack 등등.. )이 동작을하면 프로세스가 되어 메모리에 올라가서 실행이 됩니다. 이때 OS 혹은 다른 프로그램에서 프로세스가 한개가 아닌 여러개가 실행되는 것을 볼 수 있는데 여러개가 동시에 실행이 된다고해서 정말 동시에 실행이 되는것이 아닙니다. 동시성 동시성은 사실 동시에 일어나는 작업이 아닌, 컨텍스트 스위칭 이라는 작업을 통해서 빠르게 한 프로세스 씩 수행하는 방법입니다. 동시에 실행하고 싶은 프로세스 두개가 있습니다. 프로세스 1 이 CPU 로 올라갑니다. 프로세스 1은 준비상태로 내려가고 프로세스 2가 다시 CPU 로 올라갑니다. 프로세스 1은 CPU로 올라가고 프로세스 2가 준비 상태로 내려갑니다. 이 과정을 .. 2022. 4. 29.
[객체 지향 프로그래밍 입문] 다형성 과 추상화 다형성 여러 모습을 갖는 것을 말합니다. 객체지향에서는 한 객체가 여러 타입을 갖는 것을 의미합니다. 이 의미로는 한 객체가 여러 타입의 기능을 제공할 수 있습니다. 타입 상속으로 다형성을 구현합니다. 추상화 데이터나 프로세스 등을 의미가 비슷한 개념이나 의미 있는 표현으로 정의하는 과정 추상 타입을 이용한 프로그래밍 Notifier notifer = getNotifier(...); notifier.notify(someNoti); ( 어떤 notifer 에 따라 다른 notify가 적용된다 ) 추상 타입은 구현을 감춤 ( 기능의 구현이 아닌 의도를 더 잘 드러냄 ) 추상화, 다형성 예제 KakaoSender 와 SmsSender 의 공통점을 모아둔 abstract(추상) 클래스 인 ContentSende.. 2022. 4. 20.
[객체 지향 프로그래밍 입문] 캡슐화 캡슐화란 데이터 + 관련 기능 묶기 객체가 기능을 어떻게 구현했는지 외부에 감추는 것 정보 은닉(Information Hiding) 의미 포함 외부에 영향 없이 객체 내부 구현 변경 가능 캡슐화를 하지않았을때 사용자의 정보를 가지고있는 Account package com.example.cap.domain; import com.example.cap.enumType.Grade; import lombok.*; import javax.persistence.*; import java.time.LocalDate; @NoArgsConstructor @AllArgsConstructor @Builder @Setter @Getter @Entity public class Account { @Id @GeneratedValue.. 2022. 4. 16.
[객체 지향 프로그래밍 입문] 객체 절차 지향 프로그래밍 과 객체지향 프로그래밍 의 차이 절차지향은 말 그대로 절차적( 순차적 )으로 흘러가는 코드를 말하고 객체지향 언어는 1. 캡슐화, 다형성, 클래스, 상속을 지원하는가? 2. 데이터 접근 제한을 걸 수 있는가? 이와 같은 성격이 있어야 객체지향 적인 프로그래밍이라고 할 수 있습니다. 경험 저는 프로그래밍을 시작할때 C언어로 시작을 했습니다. C언어는 절차지향 프로그래밍언어의 대표적인 예로 프로그래밍을 입문했을때 절차적으로 코드를 술술 짜면 되서 C언어로 인해서 코딩에도 흥미를 느끼게 되는 계기였습니다. C언어를 하다가 JAVA 를 시작을 했는데, 처음에는 너무 어려웠습니다. ( 지금도 어렵게 생각합니다.. ) 객체가 뭐지? 생성자? 클래스? 등의 개념적인 문제도 있었고, 자바를 절차지.. 2022. 4. 13.
[데이터베이스] 트랜잭션 이란? 트랜잭션 이란? 트랜잭션 ( Transaction ) 이란, 데이터베이스의 상태를 변화시킬때 수행하는 작업의 단위를 뜻합니다. 데이터베이스의 상태를 변화시킨다는 것은 SQL 쿼리를 이용하여 데이터베이스에 접근을 하는 것을 의미합니다. SELECT INSERT DELETE UPDATE 등 이 있습니다. 트랜잭션 설명 예시 당근마켓에서 요즘 사고싶었던 옷을 판매합니다. 그 옷의 가격은 10000원 이고, 거래를 하기로 마음을 먹고 판매자를 만났습니다. 물건을 건네받고 실시간으로 돈을 입금을하는데 서버에서 오류로 인하여 구매자의 계좌는 10000원이 빠져나갔지만, 판매자의 계좌에는 돈이 들어오지 않았습니다. 이때 서버에서 오류가 발생하지 않고 작업이 잘 성공되어 데이터베이스에 잘 적용되면 커밋(commit) .. 2022. 4. 2.