개발일지 22

[docker] Docker Swarm을 활용한 NFS Volume 생성과 서비스 배포

Introduction Docker Swarm을 활용하여 NFS(Network File System) Volume을 생성하고 서비스를 배포하는 방법에 대해 알아보겠습니다. 이를 통해 여러 Docker 노드 간에 데이터를 공유하고 분산된 서비스를 운영할 수 있습니다. NFS란? NFS(Network File System)은 리눅스와 유닉스 계열 운영체제에서 사용되는 분산 파일 시스템입니다. 파일 및 디렉토리를 네트워크를 통해 다른 컴퓨터에 공유할 수 있게 해주는 프로토콜입니다. Docker Swarm 이란? Docker Swarm은 Docker 컨테이너 오케스트레이션 도구 중 하나로, 여러 Docker 호스트를 하나의 가상화된 호스트로 관리하는 기능을 제공합니다. Swarm을 통해 여러 노드에 걸쳐 컨테이..

DevOps/docker 2024.02.01

[Kotlin] 스마트캐스트(smart cast) : 코틀린에서는 프로그래머 대신 컴파일러가 캐스팅한다

[Kotlin in Action] 2장 스마트캐스트: 타입 검사와 타입 캐스트를 조합 interface Expr class Num(val value: Int): Expr class Sum(val left: Expr, val right: Expr): Expr Num value라는 프로퍼티만 존재하는 단순한 클래스로 Expr 인터페이스로 존재한다. Sum Expr타입의 객체라면 어떤 것이나 Sum 연산의 인자가 될 수 있다. 따라서 Num이나 다른 Sum이 인자로 올 수 있다. Sum 은 Expr의 왼쪽과 오른쪽 인자에 대한 참조를 left right 프로퍼티로 저장한다. 이 예제에서 left나 right은 각각의 Sum이나 Num일 수도 있다. (1+2)+4 라는 식을 Sum(Sum( Num(1), Num..

[Docker] docker 기본 명령어

버전 확인 $ docker -v 이미지 다운로드 $ docker pull [이미지 명] 다운로드된 이미지 목록 $ docker images 컨테이너 생성 $ docker create [옵션] [이미지 명] 컨테이너 생성 및 실행 $ docker run [옵션] [이미지 명] 컨테이너 실행 $ docker start [컨테이너 명] 컨테이너 재실행 $ docker restart [컨테이너 명] 컨테이너 접속 $ docker attach [컨테이너 명] 컨테이너 정지 $ docker stop [컨테이너 명] 실행중인 컨테이너 목록 $ docker ps 정지된 컨테이너 목록 $ docker ps -a 컨테이너 명 변경 $ docker rename [기존 컨테이너 명] [새로운 컨테이너 명] 컨테이너 삭제 $ ..

DevOps/docker 2023.01.06

[queryDsl] Q-type Class 는 도대체 왜 만드는건가?

Q-type class QueryDSL 설정을 성공하면 @Entity가 붙은 클래스를 찾아 자동생성된다. 예를 들어 @Entity가붙은 Member.kt 클래스가 있다면 QMember.kt 파일이 자동생성된다. repositoryImpl에서 쿼리를 날릴때 메소드 기반으로 쿼리를 작성할 때 우리가 만든 도메인 클래스 구조를 설명해주는 메타데이터역할을 하며 쿼리의 조건을 설정할 때 사용하려고 만드는것이였다. 작성글 삭제하는 쿼리이다. @Entity가붙은 Member.kt 클래스가 있다면 QMember.kt 파일이 자동생성되면서 알아서 객체 이름만 맞춰준다면 쿼리를 코드처럼 편하게 짤 수 있다. override fun deleteBoard(userId: Long, board_id: Long): Boolean ..

[ProblemSolver] @Transactional(readOnly = true)는 왜 필요한가?

회사에서 소스코드를 분석하고 에제코드를 작성해보면서 단순히 왜 쓰는지에 대해 이해도가 전혀없이 @Transactional(readOnly = true) 을 주었다. 트렌젝션 일어나는 insert, update, delete 에는 쓰기가 가능하도록 별도록 @Transaction 어노테이션을 메서드에 선언해야한다. Class Level에는 공통적으로 적용되는 읽기전용인 @Transacrtion (readOnly = true) 어노테이션을 선언만하고 실행을 시켜본 결과 당연히 되지않았다. 그래놓고 왜 update가 왜 안될까 고민하고 있었다. 아래와 같이 트렌젝션 일어나는 insert, update, delete 에는 쓰기가 가능하도록 @Transactional 어노테이션을 달아줘야한다. @Service @T..

네트워크와 CS 2022.10.24

[Springboot] 데이터 인자를 넘겨받는 각기 어노테이션 : 목적으로 다르게 효율적으로 쓰일 수 있는 방법들

오늘은 form태그에서 컨트롤러에 인자를 할당하는 어노테이션 3가지에 대해 간단히 알아보고 실무에서는 어떻게 쓰이는지에 대해 알아보도록 하자. @RequestParam query 처리 전달받은 데이터를 URI상에서 찾는다. Type 1의 URI를 처리할 때 사용한다. GET 방식으로 넘어온 URI의 queryString을 받기 적절하다. @RequestBody로 데이터를 받을 경우 메소드의 파라미터명이 상관 없지만 @RequestParam으로 데이터를 받을 때는 데이터를 저장하는 이름으로 메소드의 파라미터명을 설정해줘야 한다. 해당하는 데이터만 받아올 수 있다. (@RequestBody는 객체를 받아옴) ex) http://localhost:8080/receive?name=sophie&age=23 @Pa..

[ProblemSolver] 개발 서버 구축하고 build 할 때 생기는 이슈들

안녕하세요. 스타트업으로 백엔드개발자로 이직한지 2주차입니다. 현재는 회사에서 사용하고 있는 백엔드 기술을 파악하고 소스코드를 분석하고 간단히 예제코드를 짜는 작업을 하며 업무 파악 중에 있습니다. 간단히 읊어보자면, 현재 회사에서는 Kotlin Web Server로 스프링부트를 사용하고 있고, JPA인 queryDSL을 사용하고 있습니다. 회사에서 사용하고 있는 백엔드 기술 기반으로 개발환경을 구축하고 코드작업을 하는데 지난 일주일동안 반복되는 에러를 경험하게되는 일 있었는데요. 그 때 겪은 이슈들을 공유해보고자합니다. 개인적으로 제일 어려운게 개발환경셋팅과 서버구축인것 같습니다. 1. 호환되지않는 다른 개발환경의 버전의 충돌 이슈 java, sdk, jdk , springboot 여러 개발 환경 버전..

네트워크와 CS 2022.10.23

SOLID 디자인 패턴 : 단일 책임 원칙 (Single Responsibility)

단일 책임 원칙 (Single Responsibility) 위키에 검색해보면 module, class, function은 하나의 파트에 대해서만 responsibility를 가져야한다. 라고 써있다. 매우 쉬운 원칙이기도하고 당연한 원칙이기도한데 프로그래밍을 처음 배우시는 분들이 놓치는 내용이기도하다. 간단한 예를 들어보겠다. 두 수를 더해주는 함수에 add함수와 숫자를 출력해주는 함수 numPrint를 만들 수 있다. def add(num1,num2): return num1+ num2 def numPrint(num): print(num) 두 함수를 보면 add함수는 두수를 더해서 리턴해주고, numPrint함수는 넘겨받은 숫자를 출력해준다. 각각 하나의Responsibility를 가지고 만들어진 함수이..

DesignPattern 2022.10.03

자바 스크립트 조건문인 switch문 이해하기

조건문의 종류에는 switch와 if문이 있다. switch문 조건문 이해하기!!! switch (대상) { case 조건값1; 동작 break; //생략가능 case 조건값2; 동작 break; //생략가능 default; 동작 } switch라는 키워드 뒤에 소괄호를 열어 비교할 대상을 작성하고, 중괄호로 블록문을 만든다. 블록문 안에 한 번 들여 써서 case 키워드를 작성하고 조건값을 입력한 뒤 **콜론(:)**으로 case문의 끝 지점을 구분해준다. 참고로 이렇게 쓰는 문장을 라벨문, 레이블문, lable statement라고 부른다. case문 안에서, 해당 조건값과 일치했을 때 동작해야 될 코드를 작성하면 된다. 참고로 이렇게 쓰는 문장을 라벨문, 레이블문, lable statement라고 ..

소프트웨어 자산 범위와 자산관리에 대해

소프트웨어자산관리(SAM, SoftwareAsset Management)란 ? **"소프트웨어의 구매에서부터 지속적인 사후관리에 이르기까지의 전반적인 과정"**을 말한다. 구매대상 소프트웨어의 보유여부를 조사하고 계약조건을 파악하며, 구매대상을 수요에 따라 산정하고 그에 해당하는 구매량을 조절해야 하기 때문에 소프트웨어의 자산관리의 범위는 구매를 포함한 전 과정이라 할 수 있다. 소프트웨어 자산관리의 필요성 “조직의 소프트웨어 라이프사이클 전반에 걸쳐 소프트웨어 자산에 대한 효과적인 통제 및 보호를 위해 필요한 모든 인프라스트락처와 프로세스” "최고 수준으로 운영되어야 하는 조직의 목표를 달성하기 위한 전반적인 정보시스템 관리 전략의 필수적인 부분으로 이행되어야 한다." "소프트웨어 자산관리는 회사 지배..

IT최신동향 2022.05.02