Java & Spring
-
동기화(Synchronized)Java & Spring/자바 2020. 10. 20. 20:24
동기화 자바에서 동기화(synchronized) 구현하는 방식 두 가지 동기화(synchronized) 여러 개의 스레드가 하나의 자원을 사용할 때, 현재 데이터를 사용하고 있는 스레드를 제외한 나머지 스레드들을 데이터에 접근할 수 없도록 막는 개념 synchronized 키워드를 남발하면 프로그램 성능 저하 구현 방법 synchronized method 방법 메소드 앞에 synchronized 키워드를 붙여주면 간단하게 사용 가능 public synchronized myMethod(type param) { // ... } synchronized block 방법 파라미터에 공유할 객체를 넣어서 사용 synchronized (공유 객체) { // ... } public void exMethod() { //..
-
Annotation(어노테이션)Java & Spring/자바 2020. 10. 20. 20:09
Annotation Annotation은 본래 주석이란 뜻이지만, 현재는 주석과 달리 주석처럼 코드에 달아서 클래스에 특별한 의미를 부여하거나 기능을 주입하는 기능을 가지고 있다. 런타임 시 특정 기능을 실행하도록 정보 제공 3 종류 Built-in annotation JDK에 내장되어 있으며 @Override가 대표적인 예시 Meta annotation 어노테이션에 대한 정보를(동작 대상과 시점 결정) 나타내기 위한 어노테이션 @Target이나 @Retention과 같은게 대표 예시 Custom Annotation 개발자가 직접 만드는 어노테이션 Meta annotation을 활용해서 만들 수도 있음 스프링 프레임워크에서 주로 의존성 주입(@Autowired)과 역할 정의(@service과 같은 것)에..
-
JVM & GC (JAVA)Java & Spring/자바 2020. 10. 20. 18:22
JVM과 GC JVM (Java Virtual Machine) 자바 애플리케이션을 클래스 로더를 통해 읽어서 자바 API와 함께 실행하는 것 JAVA와 OS 사이에서 중개자 역할 ~> OS에 구애받지 않고 재사용을 가능하게 함 메모리 관리, Garabage collection을 수행 스택 기반의 가상머신 cf) ARM 아키텍처와 같은 하드웨어는 레지스터 기반으로 동작 자바 실행 과정 JVM은 OS로부터 프로그램이 필요로 하는 메모리를 할당받음 JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리 자바 컴파일러(javac)가 소스코드(.java)를 바이트코드(.class)로 변환 Class Loader를 통해 class 파일들을 JVM으로 로딩 로딩된 class 파일들은 Execution engin..
-
객체지향 프로그래밍 (OOP)Java & Spring/자바 2020. 10. 20. 15:43
객체지향 프로그래밍(OOP)란 무엇인가 오퍼레이션(operation)으로 정의할 수 있음 (객체의 기능) 식별 이름 파라미터 및 파라미터 타입 리턴 값 및 리턴 타입 인터페이스 모든 오퍼레이션 집합 객체를 사용하기 위한 명세를 의미 메시지 오퍼레이션의 실행을 요청하는 것을 메시지를 보낸다고 표현 메소드 호출 ~> 메시지를 보내는 과정 객체들이 메시지를 통해서 통신 ~> 원하는 결과를 얻는다 (객체 간 메시지를 주고받음) 4가지 특징 추상화 객체의 공통 프로퍼티(요소)와 메소드를 뽑아내는 작업 코드를 어떻게 짜야할지 미리 추상적으로 설계하는 작업 캡슐화 객체 수행 목적에 따라서 데이터 구조 및 메소드를 결합해서 묶는 것. 외부에서 무분별한 객체의 변경을 막기 위해, 구현 내용을 감추고 이용 방법만 제시 클..
-
10장) 24시간 365일 중단 없는 서비스를 만들자Java & Spring/스프링 부트와 AWS로 혼자 구현하는 웹 서비스 2020. 7. 18. 15:40
9장까지 진행한 경우, 긴 시간은 아니지만, 새로운 Jar가 실행되기 전까진 기존 Jar를 종료시켜 놓기 때문에 서비스가 중단됨 무중단 배포 소개 무중단 배포 방식 AWS에서 블루 그린(Blue-Green) 무중단 배포 도커를 이용한 웹서비스 무중단 배포 L4 스위치 ~> 고가의 장비라 큰 기업 말고는 잘 안씀 엔진엑스 웹 서버, 리버스 프록시, 캐싱, 로드 밸런싱, 미디어 스트리밍 등을 위한 오픈소스 SW 대부분의 서비스에서 이용 리버스 프록시 => NginX가 외부의 요청을 받아 백앤드 서버로 요청을 전달 엔진엑스(NginX) 클라우드 인프라가 구축되어 있지 않아도 사용할 수 있다. 하나의 EC2 혹은 리눅스 서버에 NginX 1대와 스프링 부트 Jar 2대를 이용 NginX는 80(http), 44..
-
9장) 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화Java & Spring/스프링 부트와 AWS로 혼자 구현하는 웹 서비스 2020. 7. 15. 21:31
CI & CD 소개 CI => Continuous Integration - 지속적 통합 VCS (코드 버전 관리 시스템)에 PUSH가 되면 자동으로 테스트와 빌드가 수행되어 안정적인 배포 파일을 만드는 과정 CD => Continuous Deployment - 지속적 배포 빌드 결과를 자동으로 운영 서버에 무중단 배포까지 진행되는 과정 CI 4 규칙 모든 소스 코드가 살아있고(현재 실행되고) 누구든 현재의 소스에 접근할 수 있는 단일 지점을 유지할 것 빌드 프로세스를 자동화해서 누구든 소스로부터 시스템을 빌드하는 단일 명령어를 사용할 수 있게 할 것 테스팅을 자동화해서 단일 명령어로 언제든지 시스템에 대한 건전한 테스트 수트를 실행할 수 있게 할 것 누구나 현재 실행 파일을 얻으면 지금까지 가장 완전한 ..
-
8장) EC2 서버에 프로젝트를 배포해 보자Java & Spring/스프링 부트와 AWS로 혼자 구현하는 웹 서비스 2020. 7. 14. 23:55
EC2에 프로젝트 Clone 받기 git 설치 sudo yum install git으로 git 설치 git --version으로 설치 상태 체크 프로젝트 저장할 디렉토리 만들기 mkdir ~/app && ~app/step1 생성 cd ~/app/step1 이동 git clone하기 git clone 깃헙주소 테스트로 코드 검증하기 ./gradlew test 성공했다면, BUILD SUCCESSFUL이 뜬다. 여기서 한 번 실패가 떴는데, 실행권한이 없다는 표시가 떴다. chmod +x ./gradlew로 권한을 부여해줘서 해결 배포 스크립트 만들기 배포할 때마다 개발자가 하나하나 명령어를 실행하는 것은 비효율적 쉘 스크립트로 작성해서 스크립트만 실행하면, 위의 과정이 진행되도록 생성 쉘 스크립트 .sh라..
-
7장) AWS에 데이터베이스 환경을 만들어보자 - AWS RDSJava & Spring/스프링 부트와 AWS로 혼자 구현하는 웹 서비스 2020. 7. 8. 23:08
AWS RDS 웹 서비스의 백엔드를 다루려면 애플리케이션 코드를 작성하는 것 만큼 데이터베이스를 다루는 것이 중요하다. 모니터링, 알람, 백업, HA 구성 등 모두 직접 구현하려면 시간이 오래 걸리기 때문에, 여기서는 AWS RDS를 이용한다. RDS AWS에서 지원하는 관계형 데이터베이스 하드웨어 프로비저닝, DB설정, 패치 및 백업과 같이 잦은 운영 작업을 자동화하여 개발자가 개발에 집중할 수 있게 지원하는 서비스 먼저, 이 프로젝트에서는 MaridDB를 선택한다. 가격 Amazon Aurora(오로라)로 교체 용이성 MySQL과 PostgreSQL을 클라우드 기반에 맞게 재구성한 데이터베이스 MySQL은 단순 쿼리 처리 성능에 압도적이다 썬마이크로시스템과 오라클이 합병되면서 많은 MySQL 개발자들..