전체 글 보기

[ Computer Science ]/프로그래밍 이론

[CS] 프로그래밍 패러다임 (선언형, 함수형, 객체지향, 절차지향)

프로그래밍 패러다임 (programming paradigm) 프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론이다. 객체지향 프로그램이과 함수형 프로그래밍을 예로 들어보자. 객체지향 프로그래밍 : 상호작용하는 객체들의 집합 함수형 프로그래밍 : 상태 값을 지니지 않는 함숫값들의 연속 Java의 프로그래밍 패러다임 jdk 1.8 이전의 자바는 객체지향 프로그래밍을 지원했었지만, 이후로는 함수형 프로그래밍 패러다임을 지원하기 위해 람다식, 생성자 레퍼런스, 메서드 레퍼런스를 도입했다. 추가로 선언형 프로그래밍을 위해 스트림(stream) 표준 API도 추가했다. 선언형 프로그래밍과 함수형 프로그래밍 선언형 프로그래밍(declarative programming)은 '..

[ Computer Science ]/프로그래밍 이론

[CS] SOLID : 객체지향 설계 5 원칙

SOLID 객체지향의 4대 특성에 기반하기 때문에 5가지 모두 유사한 모양을 가지고 있다. 1. SRP(Single Resoponsibility Principle) : 단일 책임 원칙 클래스는 하나의 기능만 가지며, 어떤 변화에 의해 클래스를 변경해야 하는 이유는 오직 한 가지뿐이어야 한다. 변경에 의한 연쇄작용 감소 가독성 향상 유지보수 용이 서로 밀접한 관계가 있는 기능끼리 클래스로 묶고, 서로 다른 기능을 하는 클래스를 최대한 떨어뜨려놓는 것이 좋다. 이렇게 하면 문제가 발생하더라도 문제가 발생한 부분과 관련 없는 동작에는 영향을 미치지 않거나, 그 영향이 작아질 수 있다. 즉, 객체지향 설계의 이점을 살려서 유지보수를 용이하게 만들어 줘야 한다. 2. OCP(Open Closed Principle..

[ Computer Science ]/프로그래밍 이론

[CS] 객체지향 4대 특성(캡슐화, 상속, 다형성, 추상화)

객체지향의 4대 특성 : 캡슐화, 상속, 다형성, 추상화 1. 캡슐화 ( Encapsulation ) 객체의 속성(Variable)을 보호하기 위해 사용한다. 객체와 객체 간의 의사소통을 위해 필요한 정보만을 노출한다. 실제 내부 구현 정보는 숨긴다. [ Method 설계 ] 자신이 가지고있는 속성에 대해서는 해당 상태를 변경하는 기능을 제공해야 한다. 실물 객체가 가진 기능을 모두 제공해야 한다. 각각의 Method는 서로 관련성이 있어야 한다. ( getter - setter ) (add - delete ) 등 Getter / Setter : 외부에서 내부 속성에 직접 접근하지 못하도록 사용 CRUD Method : 데이터 처리를 위한 기본적인 CRUD Method 제공 Business Logic M..

DevOps

[Linux / 배포] 배포 시 사용하는 Shell Script (저장용)

killProcess.sh 원하는 Process 찾아서 삭제하기 echo "[kill process start]" # 현재 실행중인 {program}의 프로세스ID를 조회 (CURRENT_PID) CURRENT_PID=$(ps -ef | grep java | grep {program} | awk '{print $2}') echo "현재 PID : {$CURRENT_PID}" # 있으면 실행중인 프로세스를 종료하고 3초를 멈춤 if [ -z $CURRENT_PID ]; then echo "Project is not running" else echo "kill current process : $CURRENT_PID" sudo kill -9 $CURRENT_PID sleep 3 fi pullAndBuild e..

DevOps

[Linux / ubuntu] AWS Ubuntu 20.04에 swap 메모리 설정하기, Freetier 메모리 부족 현상 해결

Swap 메모리? Swap 메모리는 하드디스크의 일부를 RAM처럼 사용하도록 만들어진 메모리이다. 지금 사용 중인 컴퓨터의 메모리가 초과되었을 때, 메모리 부족 현상을 해결할 수 있다. 그러나 RAM이 아닌, HDD를 이용하는 것이기 때문에 읽고 쓰는 속도가 매우 느려진다. 테스트용으로 AWS Free Tier를 이용할 때는 좋은 옵션이다. 프로젝트를 빌드하거나, 조금의 메모리 부족으로 터지는 일을 방지할 수 있다. 1. swap file 확인 swapfile 존재 여부 확인 free sudo swapon -s 2. swap file 생성 swap을 하기 위한 swapfile 생성 sudo fallocate -l 2G /swapfile 여기선 swapfile의 용량을 2GB로 설정했다. 아래는 RAM 용..

[ Computer Science ]/프로그래밍 이론

[Computer Science/디자인 패턴] 전략 패턴(strategy pattern)

전략 패턴(strategy pattern) 전략 패턴은 정책 패턴(policy pattern)이라고도 하며, 객체의 행위를 바꾸고 싶은 경우에 직접 수정하지 않고 "전략"이라고 부르는 "캡슐화된 알고리즘"을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴이다. 비즈니스 로직을 인터페이스로 만들고, 해당 인터페이스를 구현한 클래스를 사용하도록 만드는 것이라고 생각하면 된다. 우선 Java 코드를 이용한 기본 예제로 알아보고, 추가로 Spring에서 어떻게 전략 패턴을 사용하는지 알아보자. Java 기본 예제 예제로 알아보자. interface : Payment public interface Payment { void pay(int amount); } 구현체 1 : KakaoCardPayment..

DevOps

[AWS EC2 / 배포] SpringBoot Project 배포, EC2 ubuntu, docker

들어가기 전에.. 배포를 하는 중에 워낙 여러 번 막히기도 했고, 그 과정이 모두 기억나지 않는다. 이 글을 쓰는 이유는 순전히 기록용이다. 중간중간에 빠지는 내용도 많을 것이고, 틀린 부분도 많을 것이니 양해 부탁드립니다... 갑자기 배포를 하게 된 이유 팀 프로젝트 USports를 진행 중이다. 프런트엔드 2명과 백엔드 3명이서 진행하는 6주짜리 협업 프로젝트이다. 1주 차는 기획을 했고, 2~4주 차는 개발, 5주 차부터 리팩터링과 오류수정, 프런트-백엔드 통합, 배포 등의 과정이 예정되어 있었다. 그런데 갑자기 배포를 해야만 했다.. 기획 과정에서 API 명세서를 만들었다. 그러나 개발하는 도중에 Request, Response가 많이 변경되기도 했고, 현재 API 명세서는 백엔드 개발 상황과 조..

[ Computer Science ]/프로그래밍 이론

[Spring Boot] DispatcherServlet - 스프링부트의 동작 구조

스프링 부트의 동작 구조 스프링 부트의 기본 의존성 중 하나인 spring-boot-starter-web 모듈을 사용하면, 기본적으로 내장 톰캣(Tomcat)을 사용하는 스프링 MVC 구조를 기반으로 동작한다. 클라이언트의 요청이 들어오면 서블릿이 이를 처리해야 하는데, 서블릿은 서블릿 컨테이너에서 관리하고, 톰캣이 서블릿 컨테이너의 역할과 WAS(Web Application Server)의 역할을 담당한다. 서블릿(Servlet)은 클라이언트의 요청을 처리하고, 결과를 반환하는 자바의 웹 프로그래밍 기술이다. 서블릿 컨테이너의 특징 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기를 관리한다. 서블릿 객체는 싱글톤 패턴으로 관리된다. 멀티 스레딩을 지원한다. Dispatcher Servlet 이란..