728x90

모바일 기기는 네트워크 전송량이 유선기기보다 떨어지므로 PC에서 동작하는 것과 달리 화면을 그대로 유지하면서 필요한 데이터만 전송받아 빠르게 결과를 표시한다.

스프링에서도 모바일 기기와 연동하는 경우가 많아지면서 데이터만 전송하는 기능을 지원하게 되었고, 자연히 표준화의 필요성이 생겼다.
그 결과 REST라는 방식이 등장했다.

REST란 Representational State Transfer의 약자로 하나의 URI가 고유한 리소스를 처리하는 공통 방식이다.

REST방식으로 제공되는 API를 REST API (또는 RESTful API) 라고 하며 이는 트위터 같은 Open API에서 많이 사용하고 있다.


스프링 3버전에서는 @ResponseBody 애너테이션을 지원하면서 REST 방식의 데이터 처리를 지원 했습니다.
하지만 스프링 4버전에서는 @RestController 애너테이션을 이용해 REST 방식의 데이터 처리를 지원합니다.

전통적인 Spring MVC의 컨트롤러인 @Controller는 주로 View를 반환하기 위해 사용

@RestController는 Spring MVC Controller에 @ResponseBody가 추가된 것입니다. (Controller+ResponseBody)
그래서 RestController의 주용도는 Json 형태로 객체 데이터를 반환하는 용도로 사용한다.


 

@RestController가 아닌 @Controller로 선언했을때는 메소드 들은 기본적으로 jsp를 표시한다.

여기에 필요한 메소드에 @ResponsBody를 추가해주면 jsp가 아닌 데이터만을 요청한 곳으로 보내줬었다.


 

@RestController는 별도의 View를 제공하지 않은 채 데이터를 전달하므로 전달 과정에서 예외가 발생할 수 있다.
예외에 대해 좀더 세밀한 제어가 필요할 경우 ResponseEntity 클래스를 사용하면된다.

 


 

서버에 데이터를 조회하는 것 뿐만 아니라 추가, 수정, 삭제 기능도 REST방식으로 요청해야 한다.

이떄 서버에 어떤 행위를 요청할 것인가는 HTTP 메서드를 이용해 처리해야 한다.

728x90

'개념정리' 카테고리의 다른 글

카멜케이스, 파스칼케이스, 스네이크케이스  (0) 2021.04.07
Get ,Post  (0) 2021.04.07
[java] 접근 제한자  (0) 2021.04.04
관점 지향 프로그래민(Aspect Oriented Programming , AOP)  (0) 2021.04.04
트랜젝션  (0) 2021.04.02
728x90

말 그대로 접근을 제한하기 위헤 사용된다.
여기서 말하는 접근이란 클래스 및 인터페이스 그리고 이들이 가지고 있는 멤버의 접근을 말한다.

대부분 main()메소드를 포함한 실행 클래스 외에는 외부 클래스에서 사용할 목적으로 설계된 라이브러리 클래스이다.
외부 클래스에서 사용할 시 라이브러리 클래스가 무분별하게 변경이 될 수 있다면 안전하지않은 클래스이다.
클래스를 안전하게 보호하기 위해서 생성자를 호출하지 못하게 하거나,
객체의 특징 데이터를 보호하기 위해 해당 필드에 접근하지 못하도록,
특정 메소드를 호출할 수 없도록 접근 제한자를 통해 제한할 수 있다.


클래스, 필드, 메소드에 접근제한자 선언 가능.

 

어떤 경우에는 클래스와 인터페이스를 다른 패키지에서 사용하지 못하도록 막을 필요가 있다. 
그리고 객체 생성을 막기 위해 생성자를 호출하지 못하게 하거나
필드나 메소드를 사용하지 못하도록 막아야 되는 경우도 있는데 이럴때 접군 제한자를 사용한다.

접근제한자는 public, protected, private, default가 있다.

  • public : 외부 클래스가 자유롭게 사용할 수 있도록 한다.
  • protected : 같은 패키지 또는 자식 클래스에서 사용할 수 있도록 한다.
  • private : 개인적인 것이라 외부에서 사용될 수 없도록 한다. (외부?)
  • default : 같은패키지에 소속된 클래스에서만 사용할 수 있도록 한다.

만약 클래스나 변수를 선언할 때 아무것도 쓰지 않으면 default 접근제한을 가진다.
클래스가 default를 가지면 같은 패키지에서는 제약없이 사용가능하지만
다른 패키지에서는 사용할 수 없다.


클래스의 접근제한자

클래스의 접근 제한자는 public과 default가 있다.
public은 항상 모든 곳에서 접근 가능
default는 같은 패키지 안에서만 접근 가능

public 클래스의 이름은 클래스 파일 이름과 동일해야 한다.
즉 파일 하나 당 public 클래스는 한개고 나머지는 Default클래스가 된다.
( public클래스가 하나도 없고 모두가 default인 클래스 파일은 존재할 수 있지만
 반재도 public클래스가 여러개인 파일은 존재할 수 없다 )


메소드/변수의 접근 제한자

메소드 및 변수의 접근 제한자는 public, protected, default, private가 있다.


 

728x90

'개념정리' 카테고리의 다른 글

Get ,Post  (0) 2021.04.07
[spring] Rest API  (0) 2021.04.06
관점 지향 프로그래민(Aspect Oriented Programming , AOP)  (0) 2021.04.04
트랜젝션  (0) 2021.04.02
예외처리 (try,catch, throw, throws)  (0) 2021.04.02
728x90

관점 지향 프로그래밍은 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 바라보고, 그 관점을 기준으로 각각 모듈화하여 프로그래밍하는 기법을 말한다.

AOP는 문제를 해결하기 위한 핵심 관심사항과 전체에 적용되는 공통 관심 사항을 기준으로 프로그래밍함으로써 공통 모듈을 여러 코드에 쉽게 적용할 수 있도록 도와준다.

AOP를 구현하는 다양한 방법이 존재하지만, 기본적인 개념은 공통 관심 사항을 구현한 코드를 핵심 로직을 구현한 코드 안에 삽입하는 것이다.

728x90

'개념정리' 카테고리의 다른 글

[spring] Rest API  (0) 2021.04.06
[java] 접근 제한자  (0) 2021.04.04
트랜젝션  (0) 2021.04.02
예외처리 (try,catch, throw, throws)  (0) 2021.04.02
동기 비동기  (0) 2021.03.30
728x90

하나의 단위로 수행되길 바라는 작업의 묶음(=업무 수행단위, 논리적인 수행단위)
데이터베이스에서는 상태를 변화시키기 위해 수행하는 작업의 단위
일반적인 컴퓨터 과학에서는 쪼개질 수 없는 업무처리의 단위를 의미

트랜잭션 처리는 ACID를 유지하는 것


트랜잭션의 성질

Autoimaticity : 원자성
- 트랜잭션의 원자성(atomicity)은 트랜잭션을 구성하는 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 한다는 all-or-nothing 방식을 의미한다.
 = 한 트랜잭션 내에서 실행한 작업은 하나로 간주한다. 즉 모두 성공 혹은 모두 실패
terms.naver.com/entry.naver?docId=3431260&cid=58430&categoryId=58430

Consistency : 일관성
- 트랜잭션의 일관성(consistency)은 트랜잭션이 성공적으로 수행된 후에도 데이터베이스가 일관성 있는 상태를 유지해야 함을 의미한다. 
 =  트랜잭션은 데이터 인터그리티 만족 등 일관성있는 데이터베이스 상태를 유지
terms.naver.com/entry.naver?docId=3431261&cid=58430&categoryId=58430

Isolation : 고립성
- 트랜잭션의 격리성(isolation)은 고립성이라고도 하는데, 현재 수행 중인 트랜잭션이 완료될 때까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션들이 접근할 수 없음을 의미한다. 
 = 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않게 격리
terms.naver.com/entry.naver?docId=3431262&cid=58430&categoryId=58430

Durability : 지속성
- 트랜잭션의 지속성(durability)은 영속성이라고도 하는데 트랜잭션이 성공적으로 완료된 후 데이터베이스에 반영한 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이어야 함을 의미한다. 
 = 트랜잭션이 성공적으로 실행되면 결과는 항상 저장된다.
terms.naver.com/entry.naver?docId=3431263&cid=58430&categoryId=58430


COMMIT
하나의 트랜잭션 작업이 성공적으로 끝났고, 로그가 정상적으로 남았다라는 것을 알려주는 것

ROLLBACK
트랜잭션 작업 중 비정상적으로 종료되거나, 원자성이 깨진 경우 그 전 상태로 돌아가는 작업


개발에서의 트랜잭션

DB접근이 발생하는 여러 단위 작업들을 의미있는 그룹으로 묶어서 일괄 커밋 또는 일괄 롤백하는 매커니즘을 뜻한다.

- 어노테이션 방식으로 @Transactional을 선언하여 사용한다. = 선언적 트랜잭션
- JDBC, MyBatis 등을 사용할 때는 DataSourceTransactionManager를 관리자로 등록한다.
  이 클래스는 dataSource 프로퍼티를 통해 전달받은 Connection으로 커밋, 롤백을 수행하면서 관리한다.


Spring에서 Transaction 설정하기

스프링에서는 트랜잭션 처리를 지원하는데, 그 중 annotation 방식으로 ( @Transactional ) 을 선언하여 사용하는 방법을 선언적 트랜잭션이라고 한다

클래스 전체나 메소드 단위로 @Transactional 을 적용하면 (AOP) , 트랜잭션 기능이 적용된 프록시 객체가 생성된다.

CheckedException 이나 예외가 없을 때는 Commit 하고,
UncheckedException 이 발생하면 Rollback 한다.

주의사항

@Transactional은 우선순위를 가지고 있다
클래스 method에 선언된 트랜잭션의 우선순위가 가장 높고, 인터페이스에 서언된 트랜잭션 우선순위가 가장 낮다.

클래스 메소드 > 클래스 > 인터페이스 메소드 > 인터페이스

  • 인터페이스 기반 프록시에서만 유효한 트랜잭션이 설정된다
  • 자바 어노테이션은 인터페이스로부터 상속되지 않기 때문에, 클래스 기반 프록시나 Aspect J기반에서 트랜잭션을 인식할 수 없다.
  • 스프링 트랜잭션의 기본모드인 proxy 모드에서는 오직 외부로부터 method 호출이 발생한 경우에만 method가 인터셉트 되어 트랜잭션 관리가 적용된다.
    (오브젝트 내의 한 method가 동일 오브젝트 내의 다른 method를 호출할 경우에는 호출 당한 method가 @Transctional이 붙어 있다고 해도, 적용되지 않는다. 위빙되어 있는 method를 부르는게 아니니깐.)

(위빙, Weaving : Advice를 핵심 로직 코드에 적용하는 것을 말한다. )


참조

sarc.io/index.php/java/1965-transaction

 

트랜잭션(Transaction)이란?

[{"id":"9","listid":"1","parentid":"0","videosource":"","videoid":"","imageurl":"","title":"","description":"","custom_imageurl":"","custom_title":"","custom_description":"","specialparams":"","lastupdate":"0000-00-00 00:00:00","allowupdates":"1","status":

sarc.io

velog.io/@ligok113/JAVA-Transactional-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98

 

[JAVA] @Transactional 트랜잭션

트랜잭션이란?데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위.Atomic ( 원자성 )하나의 트랜잭션에서 작업되는 일들은 모두 실행되던지 모두 실행되지 않도록 해야한다.Consistency (

velog.io

 

728x90

'개념정리' 카테고리의 다른 글

[java] 접근 제한자  (0) 2021.04.04
관점 지향 프로그래민(Aspect Oriented Programming , AOP)  (0) 2021.04.04
예외처리 (try,catch, throw, throws)  (0) 2021.04.02
동기 비동기  (0) 2021.03.30
비주얼스튜디오  (0) 2021.03.30
728x90
1. try / catch는 필수
2. try / catch를 잡아놓고 catch부분에 아무것도 작성하지 않는게 더 안좋음

3. throws를 통해 에러처리를 넘기는데 어디선가는 꼭 해야함
4. throws로 에러 책임을 넘기는게 무조건 나쁜건 아니고 상황에 맞게 사용해야함
5. Exception종류는 최대한 세세하게 선언해야함.
6. catch는 여러번 사용이 가능한데 상속 개념을 생각해서 사용해야함. (자바7부터)
    (위에 있는 catch의 Exception이 다음 catch보다 큰 개념이면 다음 catch까지 도달하지 못하기 때문)
7. 예외처리는 트랜젝션과 관계가 있다. 어디에서 예외처리를 하냐에 따라 롤백을 하느냐 마느냐를 정한다.
    뭔가가 잘못되면 모든 작업을 중단해야하는데 예외처리를 잘못하면 뭐는 진행되고 뭐는 멈추고 해서 데이터가 뒤죽박죽        된다.

 

예외처리
사용자의 실수든 환경의 오류든 코드가 제대로 실행되지 않는 경우가 있는데
예외처리를 하지 않으면 프로그램은 끝까지 실행되지 않고 중간에 멈춰버리게 된다.
그 에러 하나 때문에 프로그램이 멈추는 걸 방지하기 위해 예외처리를 한다.
예외처리를 하게 되면 프로그램이 돌다가 에러가나서 예외처리한 부분을  만나게 되면 개발자가 정해놓은 방법으로 넘어가서 프로그램이 멈추지 않게 된다.

 

예외가 일어날 것 같은 곳에 try, catch를 걸어준다.
try는 실행되어야 할 코드를 작성하고
catch에는 에러가 났을때 처리해야할 작업을 작성한다. 

근데 catch부분에 예외에 대한 상황을 적어야 한다. 계산이 잘못된예외인지, 배열에서 벗어난 값을 찾는 예외인지

catch에 예외의 종류를 적고 보통 e를 적는다

사진처럼 e가 있는데 이걸 이용해서 오류 메세지를 확인할 수 있다
e.getMessage(), e.printStackTrace() 이런 명령어를 통해 오류의 메세지를 출력할 수 있다.
근데 이런 에러메세지는 위 사진처럼 바로 보이게 하면 보안? 관련에 문제가 생길 수 있기 때문에 로깅시스템 같은걸 이용해서 따로 에러를 모아둬야 한다.

(자세하게) e.printStackTrace() > e.getMessage() > e.toString() (간단하게)
순으로 에러에 대한 내용이 자세하게 나온다.

 


 

try / catch 는 마지막에 finally를 선택적으로 넣을 수 있다. (넣어도 되고 안넣어도 되고)
finally부분은 오류가 발생했든 안했든 반드시 실행되는 부분이다.

오류가 없을때

 try부분과 finally부분이 실행
오류가 있을때

try, catch, finally 부분이 실행

 

예외 종류
https://jie0025.tistory.com/11
https://jdh5202.tistory.com/103

 

 


 

try/cathch와 throw의 차이

 

오류가 날것 같은곳에 개발자가 직접 try/catch를 잡아줘서 예외처리를 잡아줘야 하는데

오류를 처리하지않고 디바이드 메서드를 호출한 쪽에게 오류를 처리하라고 떠넘길 수 있는데 그 키워드가 throws다.

2번에 try/cathch를 사용해서 오류를 잡을 수 있지만
throws를 이용해서 2번에서 오류를 처리하지 않고 2번을 부르는 1번에 오류처리를 떠넘길 수 있다.
그리고 오류처리는 ,를 통해 여러개를 지정할 수 있다.

근데 1번 메소드에서 try/catch를 사용해야 한다.


 

에러는 어쩔 수 없는거
exception은 내가 잘하면 처리할 수 있는 것
exception은 Checked Exception과 UnChecked Exception으로 나눌 수 있다.

 


 

throw는 예외를 발생시키는것

throws는 예외를 던지는 것

throws는 메소드 선언부 끝에 작성한다.

method1에서 method2를 부른다.
그리고 method2에 throws를 작성했다.
저 코드상 method2에는 에러가 나야하는데 try/catch가 없는데도 빨간줄이 없다.
이유는 method2의 선언부에 throws를 작성했기 때문에 ClassNotFoundException이 발생한다면 method2를 부른 부분에서 처리하라는 의미가 된다.
그래서 method2를 부른 method1에서 예외를 처리해야한다. 그리고 그곳에 try/cathch가 있다. 

 

throw는 메소드 내에서 상위 블럭으로 예외를 던지는 것
throws는 현재 메소드에서 상위 메소드로 예외를 던진다.

throw는 억지로 에러를 발생시킬때도 사용되지만 현재메소드의 에러를 처리한 후에 상위 메소드에 에러정보를 줌으로써 상위 메소드에서도 에러기 발생한것을 감지할 수 있다.

 

 


throw를 쓰는 이유? (내생각)

강제로 에러를 일으키는 throw를 왜 쓸까? 하는 생각을 하던중 아래 링크를 찾았다.

일정 로직에서 벗어나면 throw를 거쳐서 강제로 에러를 내게 할 수 있다.
개발자가 일정 규칙에 따라 코드를 만드는데 사용자가 다르게 사용하거나 수작을 부릴것 같다하면
조건문을 통해 일정 조건을 벗어나면 강제로 throw를 만나게해서
에러를 일으킬 수 있다.

https://okky.kr/article/703405

 

OKKY | [Java] throws를 쓰는 이유에대해서 궁금한 점이 있습니다.

throws는 상위레벨로 예외 처리를 넘겨버리는 기능이라 알고있습니다. 그런데 메소드를 하나 만들어 확인해보니 throws를 사용 하지 않아도 예외가 발생했을경우 호출한쪽에 try catch를 통해 예외

okky.kr


예외 처리시 Exception 말고 세세하게 하고싶은데 어떤 에러가 날지 모르겠으면 강제로 에러를 일으켜서 로그를 보고
나오는 에러를 써도 되겠지?

 


참고: www.nextree.co.kr/p3239/

 

Java 예외(Exception) 처리에 대한 작은 생각

일상생활에서도 기본적인 것은 고민하지 않고 습관처럼 사용하는 경우가 있다. 초급 개발자인 나에게 ‘예외(Exception)’이 바로 그런 것이었다. 처음 JAVA수업 때 강사님께 "왜 로직을 try문으로

www.nextree.co.kr

https://limkydev.tistory.com/198

 

[JAVA] 자바 Exception 개념 및 예외 처리란?

안녕하세요. limky 입니다. 오늘은 자바 Exception에 대해서 알아보겠습니다. 예외(Exception) 및 예외 처리 개념 Exception은 해석하면 '예외'라는 뜻을 가지고 있습니다. 예외는 error의 일종이며 프로그램

limkydev.tistory.com

https://coding-factory.tistory.com/280

 

[Java] 자바 예외처리 Try Catch문 사용법

 Error(에러)와 Exception(예외의 차이) 에러(Error)란 컴퓨터 하드웨어의 오동작 또는 고장으로 인해 응용프로그램에 이상이 생겼거나 JVM 실행에 문제가 생겼을 경우 발생하는것을 말합니다. 이 경우

coding-factory.tistory.com

https://catsbi.oopy.io/92cfa202-b357-4d47-8de2-b9b3968dfb2e

 

예외처리(exception handling)

목차

catsbi.oopy.io

https://wikidocs.net/229

 

07-4 예외처리 (Exception)

프로그램을 만들다 보면 수없이 많은 에러가 난다. 물론 에러가 나는 이유는 프로그램이 오동작을 하지 않기 하기 위한 자바의 배려이다. 하지만 때로는 이러한 에러를 무시하고 ...

wikidocs.net

 

직접 예외처리

https://ktko.tistory.com/entry/JAVA-%EC%9E%90%EB%B0%94%EC%9D%98-%EC%98%88%EC%99%B8%EC%B2%98%EB%A6%ACException-handling

 

자바 예외처리(Exception handling)

자바의 예외 처리(Exception handling) 프로그램이 실행 중 어떤 원인에 의해서 오작동을 하거나 비상적으로 종료되는 것을 에러 또는 오류라고 하고 합니다. 이런 것들은 발생 시점에 따라 두 가지

ktko.tistory.com

 

 

728x90

'개념정리' 카테고리의 다른 글

관점 지향 프로그래민(Aspect Oriented Programming , AOP)  (0) 2021.04.04
트랜젝션  (0) 2021.04.02
동기 비동기  (0) 2021.03.30
비주얼스튜디오  (0) 2021.03.30
자바 게시판 엑셀출력  (0) 2021.03.30
728x90

동기 비동기를 보기전에 쓰레드를 봐야 한다.

 

pc사야중에 4코어 8쓰레드, 8코어 16쓰레드라는게 있는데 
쓰레드는 일을 하는 녀석인데 8쓰레드는 일하는 녀석이 8개
16쓰레드는 일하는 녀석이 16개

1코어 1쓰레드

2코어 2쓰레드

4코어 4쓰레드

4코어 8쓰레드

쉽게 이렇게 생각하면된다

양손이 1쓰레드

 

 

일을 할때 하나의 스레드에서 하면 한작업이 끝날때까지 다른 작업을 하지 못하기 때문에 속도가 느려진다.

스레드가 많아지면 한번에 2가지 4가지 일을 할 수 있기 때문에 속도가 빨라진다.

 

 


 동기 VS 비동기 

 

비동기

작업을 다른 스레드로 보내는게 비동기 (여러개의 스레드가 돌아가서 작업을 처리한다)
동시에 일을 할 수 있다.
- 작업을 다른 스레드에서 하도록 시킨 후.
  그 작업이 끝나길 '안기다리고' 다음일을 진행한다.
  (안 기다려도 다음 작업을 생성할 수 있다.)

동기

작업을 다른 스레드로 보내지 않고 하나의 스레드에서 작업을 하는거 (하나의 스레드에서 차례대로 작업을 하는것)
동시에 일을 하지 않는다.
- 작업을 다른 스레드에서 하도록 시킨 후,
  그 작업이 끝나길 '기다렸다가' 다음일을 진행한다.
  (기다렸다가 다음 작업을 생성할 수 있다.)

 


비동기 라는 개념이 일반적으로 필요한 이유는 서버와의 통신 때문

직렬 (Serial) VS 동시 (Concurrent)?

직렬(Serial) 처리
(보통 메인에서) 분산처리 시킨 작업을 '다른 한개의 쓰레드에서' 처리
순서가 중요한 작업을 처리할 때 사용

동시(Cocurrent) 처리
(보통 메인에서) 분산처리 시킨 작업을 '다른 여러개의 쓰레드에서' 처리
각자 독립적이지만 유사한 여러개의 작업을 처리할 때 사용


분산처리 하려는거면 무조건 동시( Concurrent)처리'가 무조건 좋아 보이는데 왜 직렬 (Serial)처리가 필요할까?

작업에 순서가 필요한 경우가 있기 때문이다. 무조건 1번이 끝나고 2번이 실행되야 하는 경우

 

동시처리의 예

당근마켓 어플에서 목록을 봤을때 물건의 이미지를 하나씩 다 서버에서 가져올때 그 하나 하나가 동시처리


비동기(Async)와 동시(Concurrent)의 차이

비동기는작업을 보내는 스레드에 관련된말

동시는 메인 스레드에서 다른 스레드로 작업을 보낼때 한개냐 여러개냐의 개념


 

728x90

'개념정리' 카테고리의 다른 글

트랜젝션  (0) 2021.04.02
예외처리 (try,catch, throw, throws)  (0) 2021.04.02
비주얼스튜디오  (0) 2021.03.30
자바 게시판 엑셀출력  (0) 2021.03.30
spring 쿼리로그 출력, log4j  (0) 2021.03.29
728x90
728x90

'개념정리' 카테고리의 다른 글

예외처리 (try,catch, throw, throws)  (0) 2021.04.02
동기 비동기  (0) 2021.03.30
자바 게시판 엑셀출력  (0) 2021.03.30
spring 쿼리로그 출력, log4j  (0) 2021.03.29
(미완성)인터프리터 방식  (0) 2021.02.23
728x90
728x90

'개념정리' 카테고리의 다른 글

동기 비동기  (0) 2021.03.30
비주얼스튜디오  (0) 2021.03.30
spring 쿼리로그 출력, log4j  (0) 2021.03.29
(미완성)인터프리터 방식  (0) 2021.02.23
Java EE 와 Java SE의 차이점  (0) 2021.02.22

+ Recent posts