본문 바로가기
728x90
SMALL

Java46

트랜잭션처리(2) 게시글을 보면 보통 글의 제목 옆에 댓글의 개수도 나와있다. 이 기능을 구현하면서 트랜잭션처리에 대해 조금 알아가보자 한개의 게시글에 댓글의 수도 포함을 시켜야해서 DB의 테이블을 수정해주자 alter table tbl_board add (replycnt number default 0); 기존에 댓글이 존재했다면 replyCnt에 반영해 주어야 한다. 그래서 아래의 쿼리문을 실행시켜야한다. update tbl_board set replycnt = (select count(rno) from tbl_reply where tbl_reply.bno = tbl_board.bno); 그리고 프로젝트도 수정해주자 DB가 수정되었으므로 BoardVO 클래스와 MyBatis의 SQL, BoardService등을 수정해야.. 2021. 10. 11.
트랜잭션관리(1) 트랜잭션이란? 비즈니스에서는 쪼개질 수 없는 하나의 단위 작업을 말 떄 '트랜잭션'이라는 용어를 쓴다 트랜잭션의 성격을 ACID원칙으로 설명한다. 원자성(Atomicity) 하나의 트랜잭션은 모두 하나의 단위로 처리되어야한다. 어떤 트랜잭션이 A,B로 구성된다면, 항상 A,B의 처리결과는 동일해야한다. A는 성공했지만, B가 실패할 경우 A,B는 원래 상태로 돌아가야한다. 어떤 작업이 잘못되는 경우 모든 것은 다시 원점으로 될오간다. 일관성(Consistency) 트랜잭션이 성고했다면 DB의 모든 데이터는 일관성을 유지해야한다. 트랜잭션으로 처리된 데이터와 일반 데이터 사이에는 전형 차이가 없어야한다. 격리(Isolation) 트랜잭션으로 처리되는 중간에 외부에서의 간섭은 없어야만 한다. 영속성(Dura.. 2021. 10. 11.
REST방식(9)-댓글페이징처리 댓글의 화면 처리는 다음과 같은 방식으로 처리한다. 1. 게시물을 조회하는 페이지에 들어오면 기본적으로 가장 오래된 댓글들을 가져와서 1페이지에 보여준다. 2. 1페이지의 게시물을 가져올 때 해당 게시물의 댓글의 숫자를 파악해서 댓글의 페이지 번호를 출력한다. 3. 댓글이 추가되면 댓글의 숫자만을 가져와서 최종 페이지를 찾아서 이동 4. 댓글의 수정과 삭제 후에는 다시 동일 페이지를 호출 댓글 페이지 계산과 출력 Ajax로 가져오는 데이터가 replyCnt와 list라는 데이터로 구성되므로 이를 처리하는 reply.js의 내용 역시 이를 처리하는 구조로 수정한다. //function getList(param, callback, error) { // //var bno = param.bno; //var pa.. 2021. 10. 11.
싱글쓰레드와 멀티쓰레드 main쓰레드 main 메서드 의 코드를 수행하는 쓰레드 예를들어 우리가 main메서드를 실행하면 위가 바로 메인쓰레듣가 쓰레드는 사용자쓰레드와 데몬쓰레드, 두 종류가 있다. 데몬쓰레드 : 간단히 얘기해서 사용자 쓰레드의 보조 역할, 더보기 실행 중인 사용자 쓰레드가 하나도 없을 때 프로그램은 종료된다. 메인쓰레드가 종료되면 전체 프로그램이 종료되었지만, 멀티쓰레드 프로그램에서 아직 실행중인 쓰레드가 있다면 프로그램은 종료되지 않는다. 싱글쓰레드와 멀티쓰레드 프로스세의 차이를 보다 깊이 알아보자 하나의 쓰레드로 두개의 작업을 수행을 시켜보자, AAAAABBBBB 한개의 쓰레드가 끝나고 두번째 쓰레드가 시작된다. 그런데 또다른 프로그램은 두개의 쓰레드로 두개의 작업 수행시키면 ABABABABAB 번갈아 가.. 2021. 10. 8.
REST방식(8)-Ajax JavaScript 준비 jsp내에서 댓글에 대한 처리는 하나으 ㅣ페이지 내에서 모든 작업이 이루어지기 때문에 조금 복잡하게 느껴질수 있다. (CRUD + 페이징) 앞으로 계속사용될 JS를 모듈화 Ajax를 이용하는 경우에는 jQuery의 함수를 이용해서 너무나 쉽게 처리할 수 있기 때문에 많이 사용함. 그런데 이곳저곳 많이쓰다보니 이벤트처리, DOM처리 등등 마구섞여 유지보수가 힘들 수 있음. 그래서 하나의 모듈처럼 구성하는 방식을 이용한다. webapp 내 resource 폴더 에 js폴더 내 reply.js 파일을 작성 지금은 아무기능없이 간단히 동작하는 코드만을 넣어 확인해보자 console.log("확인"); var relyService= {}; 그리고 기존에 만들었던 jsp 파일이있는데 거기와.. 2021. 10. 8.
쓰레드의 구현과 실행 Tread클래스를 상속 이것은 하나만 상속받을 수 있는 자바언어 특성상 쓰레드를 상속받자니 조금 아쉽다. class MyThread extends Thread{ public void run(){ //쓰레드클래스의 run() 을 오버라이딩 } } Rubbable 인터페이스 상속(이게좀더 좋다) 인터페이스를 상속받으니 다른 클래스를 상속을 받을 수 있기에 class MyThread2 implements Runnable{ public void run(){ //Runnable 인터페이스의 추상메서드 run()을 구현 } } 두 상속된 것을 보면 (인터페이스와 클래스) 둘다 run()매서드를 가지고있다. 그래서 클래스를 쓰냐 인터페이스를 쓰냐 고민할 게없다. 둘다 같은 기능을 한다.! 문서에서도 쓰레드 클래스에 .. 2021. 10. 7.
프로세스와 쓰레드 프로세스와 쓰레드(process & thread) 프로세스 : 실행 중인 프로그램, 자원(메모리, 씨피유)과 쓰레드로 구성-프로그램을 실행하면 OS로 부터 실행에 필요한 자원(메모리)를 할당 받아 프로세스가 된다. 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 쓰레드 쓰레드 : 프로스세스 내에서 실제 작업을 수행 더보기 모든 프로세스는 최소한 하나의 쓰레드를 가지고 있다, 프로세스 : 쓰레드 = 공장 : 일꾼 그럼 싱글 쓰레드 프로세스(일꾼 한명!) = 자원 + 쓰레드 멀티 쓰레드 프로세스(일꾼 여러명!) = 자원+쓰레드+쓰레드 ... + 쓰레드 멀티쓰레드로 프로그램을 작성하면 여러작업을 나누어서 동시에 수행할 수 있고 보다 작업을 효율적으로 할 수있고, 우리프로그램은 대부분 멀티 쓰레드로.. 2021. 10. 7.
애너테이션 타입 정의하기 지금까지 애너테이션 사용하는 방법에 대해 공부함. 이제 만들어서 사용해 볼것이다. 새로운 애너테이션을 정의하는 방법은 다음과 같다. @기호를 붙이는 것을 제외하는 인터페이스를 정의하는 것가 동일하다. @interface 애너테이션이름{ 타입 요소이름(); } @interface DateTime{ String yymmdd(); String hhmmss(); } 위는 2개의 요소가 있고, 타입은 스트링, 날짜와 시간을 의미하는것으로 보여줄수 있다. 추상 메서드로 되어있다. 애너테이션의 메서드는 추상 메서드이며, 애너테이션을 적용할 때 지정(순서는 상관없다.) @interface TestInfo{ int cnt(); String name(); Stirng[] mambers(); TestType testType.. 2021. 10. 6.
메타 애너테이션 메타 에너테이션은 애너테이션을 위한 애너테이션이다. 즉, 애너테이션을 만들때 만드는 애너테이션, 애너테이션에 붙이는 애너테이션으로 애너테이션을 정의할 때 애너테이션의 적용대상이나 유지기간 등을 지정하는데 사용된다. Java.lang.annotation패키지에 포함되어있다. 애너테이션 설명 @Target 애너테이션이 적용가능한 대상을 지정하는데 사용한다. @Documented 애너테이션 정보가 javadoc로 작성된 문서에 포함되게 한다. @Inherited 애너테이션이 자손 클래스에 상속되도록 한다. @Retention 애너테이션이 유지되는 범위를 지정하는데 사용한다. @Repeatable 애너테이션을 반복해서 적용할 수 있게 한다.(JDK1.8) @Target 애너테이션 애너테이션을 정의할 때, 적용대.. 2021. 10. 6.
REST방식(4) 컬렉션 타입의 객체 반환 produce 속성은 반드시 지정해야 하는 것은 아니여서 생략했더니 동일한 화면값을 얻었다. 경우에 따라서는 여러 데이터를 한 번에 전송하기 위해서 배열이나 리스트, 맵 타입의 객체들을 전송하는 경우도 발생한다. @GetMapping(value = "/getList") public List getList() { log.info("MIME TYPE : " + MediaType.TEXT_PLAIN_VALUE); return IntStream.range(1, 10).mapToObj(i -> new SampleVO(i, i + "First", i + "Last")) .collect(Collectors.toList()); } getList()는 내부적으로 1부터 10미만까지의 루프를 처리.. 2021. 10. 6.
728x90
LIST