public static void main(String[] args)에서 각각의 의미


main 함수는 프로그램의 시작부터 끝까지 있는 함수이다.


1. public을 사용하는 이유?

다른 클래스들의 메소드들을 호출해서 사용하는데, main 자체가 다른곳에서 접근을 허용하지 않으면 문제가 발생하기

때문에 public 사용


2. static을 사용하는 이유?

static의 특징으로는 따로 인스턴스화 하지 않아도 되고, 시작과 동시에 메모리에 호출되어진다는 점이다.

즉, 프로그램이 종료될 때까지 계속 유지가 되는데, static이 있기 때문에 계속 참조할 수 있고, GC(garbage collector)에

의해서 사라질 염려가 없기에, static을 사용해야한다.


3. void를 사용하는 이유?

main 함수 자체가 시작과 끝을 의미하는 것인데, 종료되는 시점에서 무슨 값을 반환한다 해서 의미가 있다고 생각하지

않는다. 그렇기 때문에 void로 설정해야한다.


4. args[]를 사용하는 이유?

처음 프로그램을 실행하는 순간 외부 값을 가져와서 프로그램 안에 사용하고자 할 때, 메모리에 저장할 공간을 미리 선언

해 두기 위해서 사용

'프로그래밍 > JAVA' 카테고리의 다른 글

싱글턴 패턴 사용하는 이유  (0) 2019.01.06
abstract와 Interface  (0) 2019.01.04
java exe 파일 만들기  (0) 2018.09.01
자바 OutputStream 줄바꿈  (0) 2018.08.31
JAVA 파일입출력  (0) 2018.08.30

프레임워크

소프트웨어 어플리케이션이나 솔루션의 개발을 수월하게 하기 위해 소프트웨어의 구체적 기능들에 해당하는 부분의 설계와 구현을 재사용 가능하도록

협업화된 형태로 제공하는 소프트웨어 환경을 말한다.

 간략하게 설명하면 프로그램 기본 구조(뼈대)라고 생각하면된다.

예시) JAVA 개발자 -> Spring , Python 개발자 -> Django, JavaScript 개발자 -> Angularjs


플랫폼

특정 장치나 시스템 등에서 이를 구성하는 기초가 되는 틀 또는 골격을 지칭하는 용어

오프라인의 가게가 될 수 도 있고 매장일 수도 있고, 온라인의 판매 시스템인 쇼핑몰, 카페, 블로그 다양한 SNS, 소셜미디어, 라이브 쇼핑몰 등 무엇인가(

컨텐츠 상품 등)를 알리고 팔고, 살 수 있는 툴(시스템)을 통틀어 플랫폼이라고 한다.

 프로그램이 실행되는 환경이며 플랫폼은 플랫폼 위에 다른 플랫폼이 존재할 수 있다. 가령, Windows에서 java로 개발하고 있으며

앱스토어에서 어플을 내려받는 과정에서 이미 3개의 플랫폼을 사용하고 있는 것이다.

플랫폼은 같은 영역에도 다양한 목적과 가치로 많이 만들어지고 있으며 모든 플랫폼에서 실행되도록 개발하기는 어렵다.

프로그램의 목적에 맞도록 플랫폼을 선택하는 것이 중요하다.

예시) Windows, Linux, macOS 등 O/S는 모두 플랫폼이다.

어플을 다운받는 앱스토어, 구글플레이, 원스토어도 플랫폼이다.


프레임워크와 플랫폼의 차이

프레임워크 : 소프트웨어 뼈대 구조

플랫폼 : 소프트웨어 실행 환경



참고 

https://blog.naver.com/kitepc/221314674197


'프로그래밍' 카테고리의 다른 글

포인터 사용이유  (0) 2018.12.26

 java exe 파일 만들기

(1) 이클립스로 만든 java를 JAR 배포판 만들기

http://javacrush.tistory.com/entry/java-%EB%82%B4-java-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EB%A5%BC-JAR-%EB%A1%9C-%EB%A7%8C%EB%93%A4%EA%B8%B0?category=284815


(2) java 파일을 exe 배포판 만들기

http://javacrush.tistory.com/entry/java-JAR-%ED%8C%8C%EC%9D%BC%EC%9D%84-EXE-%ED%8C%8C%EC%9D%BC-%EB%B0%B0%ED%8F%AC%ED%8C%90-%EB%A7%8C%EB%93%A4%EA%B8%B0?category=284815

'프로그래밍 > JAVA' 카테고리의 다른 글

abstract와 Interface  (0) 2019.01.04
public static void main(String[] args)  (0) 2018.11.22
자바 OutputStream 줄바꿈  (0) 2018.08.31
JAVA 파일입출력  (0) 2018.08.30
자바 다운그레이드  (0) 2018.08.26



http://clairdelunes.tistory.com/17


줄바꿈 계속 \n으로 안되서 찾아보니까 \r\n 으로 해야한다고 한다.


1. System.out.format() 을 이용하여 %n 개행 처리.

이렇게하면 운영체제 에 맞게 처리된다.


2. (String타입 변수명).replace("\n","\r\n")

이렇게하면 윈도우 호환에 맞게끔 처리할 수 있다.


3. String line = System.getProperty("line.separator");

   str = str.replace("\n", line);

요렇게 해도 운영체제에 맞게 줄바꿈처리가 된다.


주로 3번을 많이 사용하게 되는 것 같다.



출처: http://clairdelunes.tistory.com/17 [거꾸로 바라본 세상]

'프로그래밍 > JAVA' 카테고리의 다른 글

public static void main(String[] args)  (0) 2018.11.22
java exe 파일 만들기  (0) 2018.09.01
JAVA 파일입출력  (0) 2018.08.30
자바 다운그레이드  (0) 2018.08.26
자바빈(DTO), DAO  (0) 2018.07.28


파일읽기 파일읽기과 저장을 함께

'프로그래밍 > JAVA' 카테고리의 다른 글

java exe 파일 만들기  (0) 2018.09.01
자바 OutputStream 줄바꿈  (0) 2018.08.31
자바 다운그레이드  (0) 2018.08.26
자바빈(DTO), DAO  (0) 2018.07.28
JAVA 관련 사이트 기술 커리큘럼  (0) 2018.07.25


JAVA, JSP 버전 다운그레이드


http://mainia.tistory.com/2184

'프로그래밍 > JAVA' 카테고리의 다른 글

자바 OutputStream 줄바꿈  (0) 2018.08.31
JAVA 파일입출력  (0) 2018.08.30
자바빈(DTO), DAO  (0) 2018.07.28
JAVA 관련 사이트 기술 커리큘럼  (0) 2018.07.25
스트레티지 패턴  (0) 2018.07.23


Spring 프레임워크의 구성요소와 동작원리

http://asfirstalways.tistory.com/334



모든 트랜잭션이 같은 방식으로 동작하는 건 아니다. 전체가 같이 실패하거나 성공하는 하나의 작업으로 묶인다는 점에서는 다를바 없겠지만, 세밀히 따져보면 몇 가지 차이점이 있다. 스프링은 트랜잭션의 경계를 설정할 때 네 가지 트랜잭션 속성을 지정할 수 있다. 또, 선언적 트랜잭션에서는 롤백과 커밋의 기준을 변경하기 위해 두 가지 추가 속성을 지정할 수 있다. 선언적 트랜잭션 기준으로 보자면 모든 트랜잭션 경계는 여섯 가지 속성을 갖고 있는 셈이다.


SpringFramework의 트랜잭션 전파 속성

2개 이상의 트랜잭션이 작동할 때, 기존의 트랜잭션에 참영하는 방법을 결정하는 속성


REQUIRED 

DEFAULT : 전체 처리

 디폴트 속성이다. 모든 트랜잭션 매니저가 지원하며, 대개 이속성이면 충분하다. 미리 시작된 트랜잭션이 있으면 참여하고 없으면 새로 시작한다. 자연스럽고 간단한 트랜잭션 전파 방식이지만 사용해보면 매우 강력하고 유용하다는 사실을 알 수 있다. 하나의 트랜잭션이 시작된 후에 다른 트랜잭션 경계가 설정된 메소드를 호출하면 자연스럽게 같은 트랜잭션으로 묶인다.


SUPPORTS

기존 트랜잭션에 의존

 이미 시작된 트랜잭션이 있으면 참여하고 그렇지 않으면 트랜잭션 없이 진행하게 만든다. 트랜잭션이 없긴 하지만 해당 경계 안에서 Connection이나 하이버네이트 Session 등을 공유할 수 있다.


MANDATORY

트랜잭션에 꼭 포함 되어야 함. (트랜잭션이 있는 곳에서 호출해야 함)

 REQUIRED와 비슷하게 이미 시작된 트랜잭션이 있으면 참여한다. 반면에 트랜잭션이 시작된 것이 없으면 새로 시작하는 대신 예외를 발생시킨다. 혼자서는 독립적으로 트랜잭션을 진행하면 안 되는 경우에 사용한다.


REQUIRES_NEW ( <->REQUIRED)

각각 트랜잭션 처리(별도의 트랜잭션 처리)

REQUIRED의 반대라고 보면 된다. 항상 새로운 트랜잭션을 시작한다. 이미 진행 중인 트랜잭션이 있으면 트랜잭션을 잠시 보류시킨다. JTA 트랜잭션 매니저를 사용한다면 서버의 트랜잭션 매니저에 트랜잭션 보류가 가능하도록 설정되어 있어야 한다.


NOT_SUPPORTED ( <-> SUPPORTS)

트랜잭션에 포함 하지 않음(트랜잭션이 없는 것과 동일 함)

 SUPPORTS의 반대. 트랜잭션을 사용하지 않게 한다 . 이미 진행 중인 트랜잭션이 있으면 보류시킨다.


NEVER ( <-> MANDATORY)

트랜잭션에 절대 포함 하지 않음. 트랜잭션이 있는 곳에서 호출하면 에러 발생

트랜잭션을 사용ㅈ하지 않도록 강제한다. 이미 진행 중인 트랜잭션도 존재하면 안된다. 있다면 예외를 발생시킨다.


NESTED

 이미 진행중인 트랜잭션이 있으면 중첩 트랜잭션을 시작한다. 중첩 트랜잭션은 트랜잭션 안에 다시 트랜잭션을 만드는 것이다. 하지만 독립적인 트랜잭션을 마드는 REQUIRES_NEW와는 다르다.


중첩된 트랜잭션은 먼저 시작된 부모 트랜잭션의 커밋과 롤백에는 영향을 받지만 자신의 커밋과 롤백은 부모 트랜잭션에게 영향을 주지 않는다. 예를 들어 어떤 중요한 작업을 진행하는 중에 작업 로그를 DB에 저장해야 한다고 해보자. 그런데 로그를 저장하는 작업이 실패하더라도 메인 작업의 트랜잭션까지는 롤백해서는 안되는 경우가 있다. 힘들게 처리한 시급한 작업을 단지 로그를 남기는 작업에 문제가 있다고 모두 실패로 만들 수는 없기 때문이다. 반면에 로그를 남긴 후에 핵심 작업에서 예외가 발생한다면 이때는 저장한 로그도 제거해야 한다. 바로 이럴 때 로그 작업을 메인 트랜잭션에서 분리해서 중첩 트랜잭션으로 만들어 두면 된다. 메인 트랜잭션이 롤백되면 중첩된 로그 트랜잭션도 같이 롤백되지만, 반대로 중첩된 로그 트랜잭션이 롤백돼도 메인 작업에 이상이 없다면 메인 트랜잭션은 정상적으로 커밋된다.





Springframework 트랙잭션

Dao 클래스에 PlatformTransctionManager 필드를 선언해준다.



트랜잭션 매니저를 이용하여 트랜잭션 처리를 할 곳에 트랙잭션 설정을 해준다.

밑에 두 줄은 공통으로 사용될 부분이다. 그 뒤 트랙잭션 처리할 부분을 try catch문으로 감싸게 된다.



/src/main/webapp/WEB-INF/spring/appServlet

파일안에 servlet-context.xml 에서 트랙잭션 설정을 하면 된다.


제약조건에 걸리게 되면(오류가 나면) 트랙잭션이 롤백되면서 데이터베이스가 업데이트 되지 않는다.


===============================================================================================
TransactionTemplate 은 위에 사용한 PlatformTransactionManager 인터페이스보다 더욱 많이 사용되는 TransactionTemplate 이다. 많이 사용된다는 것은 기존의 방법보다 개발자의 수고가 덜 할 수 있다는 의미이다.


servlet-context.xml에서 

위와 같이 바꿔준다음


익명 클래스를 통해서 트랙잭션을 원하는 메소드를 안에 넣어준다.

+ Recent posts