자바 관련한 이런저런 끄적임 - 2

Dasole Kwon·2022년 8월 22일
0

항해99

목록 보기
47/47

@Autowired : 스프링 프레임워크에서 관리하는 Bean 객체와 같은 타입의 객체를 찾아서 자동으로 주입해주는 것. 해당 객체를 Bean으로 등록하지 않으면 주입해줄 수 없다.

@Transactional:
transaction이란 데이터베이스의 상태를 변경하는 작업 또는 한번에 수행되어야 하는 연산들을 의미한다. begin, commit 을 자동으로 수행해준다. @transactional에 적용된 범위에서는 트랜잭션 기능이 포함된 프록시 객체가 생성되어 자동으로 commit 혹은 rollback을 진행해준다. 트랜잭션은 4가지의 성질을 가지고 있다.

ACID:
A: Atomocity원자성 한 트랜잭션 내에서 실행한 작업들은 하나의 단위로 처리한다. 즉, 모두 성공 또는 모두 실패.
C: Consistency 일관성 트랜잭션은 일관성 있는 데이타베이스 상태를 유지한다. (data integrity 만족 등.)
I: Isolation 고립성 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리해야한다.
D: Durability지속성 트랜잭션을 성공적으로 마치면 결과가 항상 저장되어야 한다.

@service, @component차이?
@Component
Spring에서 관리되는 객체임을 표시하기 위해 사용하는 가장 기본적인 annotation이다. 즉, scan-auto-detection과 dependency injection을 사용하기 위해서 사용되는 가장 기본 어노테이션이다.

@Controller
Web MVC 코드에 사용되는 어노테이션이다. @RequestMapping 어노테이션을 해당 어노테이션 밑에서만 사용할 수 있다.

@service
DB에 접근하는 코드는 repository에 위임
비즈니스 로직과 관련된 모든 코드

@Repository
이것은 Annotation based Configuration, @Repository의 작업은 플랫폼 별 예외를 잡아서 Spring의 통합 검사되지 않은 예외 중 하나로 다시 던지는 것입니다. 이를 위해 PersistenceExceptionTranslationPostProcessor이 제공되며 다음과 같이 Spring의 애플리케이션 컨텍스트에 추가해야함.

@Bean
@Bean은 개발자가 직접 제어가 불가능한 외부 라이브러리를 사용할 때 사용한다.
@Configuration을 선언한 클래스 내부에서 사용해준다.
즉, 개발자가 작성한 메소드를 통해 반환되는 객체를 Bean으로 만든다.
@Component는 개발자가 직접 작성한 Class를 Bean으로 등록 할 수 있게 만들어 준다.
즉 개발자가 작성한 class를 Bean으로 만든다.

@Getter 또는 @Setter를 선언해줄 경우, 모든 필드에 접근자와 설정자가 자동으로 된다. @NoArgsConstructor 어노테이션은 파라미터가 없는 기본 생성자를 생성해주고, @AllArgsConstructor 어노테이션은 모든 필드 값을 파라미터로 받는 생성자를 만들어준다.
마지막으로 @RequiredArgsConstructor 어노테이션은 final이나 @NonNull인 필드 값만 파라미터로 받는 생성자를 만들어준다.

http란? http/https 차이
HTTP는 Hyper Text Transfer Protocol의 줄임말으로써 서버와 클라이언트간에 데이터를 주고 받는 프로토콜이다. HTTP는 텍스트, 이미지,영상, JSON 등등 거의 모든 형태의 데이터를 전송할수 있다.
HTTP 통신은 클라이언트와 서버간의 통신에 있어서 별다른 보안 조치가 없기때문에 만약 누군가 네트워크 신호를 가로챈다면 HTTP의 내용은 그대로 외부에 노출된다. 중요 정보가 없는 소규모의 프로젝트라면 문제가 되지 않겠지만 고객의 개인정보나 비밀을 취급하는 대규모 서비스라면 큰 보안적 허점이 될 것이다.

이런 문제를 해결하기 위해 등장한 것이 HTTPS. HTTP에 데이터 암호화가 추가된 프로토콜이다. HTTPS는 HTTP와 다르게 443번 포트를 사용하며, 네트워크 상에서 중간에 제3자가 정보를 볼 수 없도록 암호화를 지원하고 있다.

server error 모음


Nginix란?
동시 접속 처리에 특화된 웹서버로 클라이언트로부터 http 요청을 받아 요청에 해당하는 파일을 http통신을 통해 응답해주는 프로그램. 웹서버 특성상, WAS와는 다르게 정적 콘텐츠 호스팅에 특화되어있고 이밖에 리버스 프록시, 캐싱, 로드밸런싱 등 여러 역할을 수행한다.

정적 파일을 처리하는 http서버로서의 역할: 웹서버의 역할은 HTML, CSS, Javascript, 이미지와 같은 정보를 웹 브라우저(Chrome, Iexplore, Opera, Firefox 등)에 전송하는 역할을 한다. (HTTP 프로토콜을 준수) 응용프로그램 서버에 요청을 보내는 리버스 프록시로서의 역할

프록시 서버(proxy server)는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 가리켜 ‘프록시’, 그 중계 기능을 하는 것을 프록시 서버라고 부른다.
포워드 프록시(forward proxy): 우리가 흔히 말하는 ‘프록시 서버’란 포워드 포록시 서버를 의미. 클라이언트가 인터넷 웹서버에 요청을 보내면 중간에서 그 요청을 프록시 서버가 가로챈다. 그리고나서 프록시 서버는 해당 요청을 웹서버에게 다시 보내고 웹서버에게 받은 응답을 다시 클라이언트에게 전달한다.
리버스 프록시(reverse proxy): 포워드 프록시 서버는 클라이언트 앞에 놓여져 있는 반면, 리버스 프록시 서버는 웹서버 앞에 놓여 있다. Reverse Proxy는 클라이언트로부터의 요청을 받아서(필요하다면 주위에서 처리한 후) 적절한 웹 서버로 요청을 전송한다. 웹 서버는 요청을 받아서 평소처럼 처리를 하지만, 응답은 클라이언트로 보내지 않고 Reverse Proxy로 반환한다. 요청을 받은 Reverse Proxy는 그 응답을 클라이언트로 반환한다. 통상의 프락시 서버는 LAN -> WAN의 요청을 대리로 수행하지만 Reverse Proxy는 WAN -> LAN의 요청을 대리한다.
클라이언트로부터의 요청이 웹서버로 전달되는 도중의 처리에 끼어들어서 다양한 전후처리를 시행할 수가 있게 된다.

포워드 프록시 서버를 사용하면 클라이언트와 직접 통신하는 웹서버가 없다는 것을 알 수 있다. 반면 리버스 프록시 서버를 사용하면 웹서버와 직접 통신하는 클라이언트가 없다는 것을 알 수 있다.

Hikari pool:
HikariCP는 가벼운 용량과 빠른 속도를 가지는 JDBC의 커넥션 풀 프레임워크이다. SpringBoot는 커넥션 풀 관리를 위해 HikariCP를 사용한다.

스태틱 메모리 (Static)
전역 변수와 정적 멤버 변수 static이 붙은 자료형을 저장한다. 문제는 한번 선언된 전역 변수는 언제 어디서든 꺼내 쓸 수 있다. 덕분에 개발시에 편리하지만 메모리가 계속 상주해 있다. 그래서 사이트가 느려지고 서버가 다운되는 경우가 발생하기도 한다. 그래서 스태틱 메모리 영역은 정말 잘 사용해야 한다.

  • 전역변수를 저장
  • 멤버변수를 저장
  • 컴퓨터 종료시까지 메모리 상주

스택 메모리(stack)
기본 자료형을 생성할때 저장되는 공간이 스택 메모리 영역. 데이터 값이 저장되는 공간이라고 보면 된다. 메소드가 실행될때 할당 되고 메소드가 종료하면 함께 종료된다.
① 기본 자료형 (int, double, byte, long, boolean 등)에 해당되는 지역변수 (매개 변수 및 블럭문 내 변수 포함)의 데이터의 값이 저장되는 공간이다.
② Heap 영역에 생성된 Object 타입의 데이터의 참조값 이 할당된다.
③ 메소드 지역 변수 외에도 if문 , 반복문, 예외처리를 위한 try문등도 포함된다.

  • 기본 자료형이 사용하는 메모리
  • 메소드 실행, 종료와 함께 생명주기를 같이함
  • 매우 빠른 액세스
  • 변수를 명시적으로 할당 해제할 필요가 없다
  • 공간은 CPU에 의해 효율적으로 관리되고 메모리는 단편화되지 않는다.
  • 지역 변수만 해당된다
  • 스택 크기 제한(OS에 따라 다르다)
  • 변수의 크기를 조정할 수 없다

힙 메모리 (heap)
인스턴스 생성할때 생성되는 메모리 형식. new를 사용하여 객체를 생성하면 저장. 참조형 자료도 힙 메모리 영역으로 저장된다. 모든 자바 클래스의 인스턴스(instance)와 배열(array)이 할당되는 곳으로, 런타임 데이터(Object타입의 데이터)를 저장하는 영역이다.

  • 참조 자료형 메모리
  • 인스턴스 생성시에 할당
  • 스택이 참조 값을 가지고 있고 핸들링한다.
  • 변수는 전역적으로 액세스 할 수 있다.
  • 메모리 크기 제한이 없다
  • (상대적으로) 느린 액세스
  • 효율적인 공간 사용을 보장하지 못하면 메모리 블록이 할당된 후 시간이 지남에 따라 메모리가 조각화 되어 해제될 수 있다. - 메모리를 관리해야 한다 (변수를 할당하고 해제하는 책임이 있다)
  • 변수는 자바 new를 사용

0개의 댓글