목록자바 (91)
삶 가운데 남긴 기록 AACII.TISTORY.COM
카카오 로그인 설정우선 카카오 계정이 필요합니다.카카오 로그인 준비를 위해서 카카오 디벨로퍼 사이트에 가서 로그인합니다.(카카오 계정으로 로그인됩니다.)https://developers.kakao.com/ Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발해 보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.developers.kakao.com로그인 한 뒤 상단에 앱 메뉴를 누르고 + 앱 생성 버튼을 클릭합니다.필수 입력 정보를 입력한 뒤 저장 버튼을 누르면 앱이 추가됩니다.방금 추가한 앱을 눌러보면 좌측에 메뉴가 나오는데 앱 > 플랫폼 키 메뉴로 들어갑니다.이 중 REST API키는 따로 보관해 둡니다.REST API키 항목 근처에 클라..
JPA 연관관계 결정데이터베이스에서는 PK와 FK으로 엔티티 간 관계를 표현합니다.반면 JPA는 객체 지향이라서 데이터 연관관계의 방향성을 결정하는 것이 어렵습니다.예를 들어, 회원이 여러 개의 아이템을 가지고 있다고 가정하면, 회원 객체가 아이템들을 참조할 것인지, 아이템이 회원을 참조할 것인지 판단해야 합니다.JPA는 보통 변화가 많은 쪽을 기준으로 결정하거나 ERD에서 FK를 기준으로 결정합니다. 변화가 많은 쪽 기준회원과 게시물의 관계를 예를 들면, 회원들이 활동을 통해 여러 게시물이 만들어지므로 연관 관계는 게시물 기준으로 판단하는 것이 좋습니다.회원 아이디회원 이름user1사용자1user2사용자2user3사용자3user4사용자4번호제목작성자내용1제목1사용자1내용...12제목2사용자2내용...2..
jdk11, gradle 6, springframework 5 기준으로 작성되었습니다. FreeMarker자바 기반 서버측 템플릿 엔진으로 뷰 레이어(프레젠테이션 레이어) 개발에 사용됩니다.서버에서 데이터를 처리하고 freemarker 템플릿으로 뷰를 생성하여 최종 HTML을 브라우저에 전송합니다.미리 정의된 템플릿고 동적으로 생성된 데이터를 결합시켜주는 소프트웨어입니다.데이터 처리용 비즈니스 로직과 화면 표시용 프레젠테이션 로직을 분리하는데 사용합니다.자바 코드에서는 데이터를 준비하고 freemarker 템플릿 파일(FTL)에서는 그 데이터를 사용자에게 보여주는 방식으로 정의합니다. 1. 디렉티브(Directives): 템플릿이 수행해야 할 작업을 지정예) 2. 보간(Interpolations): 데..
관점 지향(Aspect Oriented Programming)로깅보안/인증트랜잭션리소스 풀링에러 검사 / 처리정책멀티 스레드 안전 관리데이터 영속처리위 항목들은 소프트웨어 개발 시 발생하는 공통적인 문제들입니다.핵심 관심(core concern)은 업무 로직을 말합니다.횡단 관심(cross-cutting concern)은 위에서 언급한 로깅이나 보안등 공통 시스템 로직을 말합니다. 이처럼 업무 기능과 시스템 기능간에 결합성을 제거하도록 분리하여 작성하는 방법을 관점 지향이라고 합니다. 관점 지향 용어advice : 관점이 언제, 무엇을 하는지를 정의joinpoint : 관점이 실행될 수 있는 위치들pointcut : joinpoint 중에서 advice 하는 위치(어디서)aspect : advice +..
Spring bean스프링 프레임워크가 관리하는 클래스들의 모든 인스턴스 객체들을 Spring bean 이라고 합니다.Spring Framework에서 "Bean"은 Spring IoC(Inversion of Control) 컨테이너에 의해 인스턴스화, 구성 및 관리되는 객체(Object)를 의미합니다.Spring Bean의 특징:관리 주체: 객체의 생성(인스턴스화), 설정(의존성 주입), 생명주기(초기화, 소멸)를 Spring IoC 컨테이너가 전적으로 관리합니다.설정: 클래스에 @Component, @Service, @Repository, @Controller와 같은 Stereotype 애노테이션을 붙이거나, @Configuration 클래스 내부의 @Bean 메서드를 통해 등록합니다.규약: Spri..
Spring MVC 프로젝트 구조 설명src/main/java/ : 자바 소스 경로src/main/resources/ : 실행시 자동 참고되는 경로(주로 설정파일, log4j.xml 등등)src/test/java/ : 테스트 자바 코드 경로src/test/resources/ : 테스트 관련 설정 파일 경로src/webapp/WEB-INF/spring/appServlet/ : sevlet-context.xml 외 spring 설정 파일src/webapp/WEB-INF/spring/ : root-context.xml 외 spring 설정 파일src/webapp/WEB-INF/views/ : MVC 패턴 중 view 페이지(jsp) 들이 위치 한 경로src/webapp/WEB-INF/ : tomcat의 ..
싱글톤 패턴: 하나의 인스턴스만 사용하기 위한 디자인 패턴으로 스레드 풀링, 커넥션 풀링 등에서 주로 사용합니다. 인스턴스를 생성할 때 참조 변수를 private static으로 합니다. 생성자를 private로 한다. 이는 외부에서 new로 인스턴스를 생성하지 못하게 합니다.인스턴스를 리턴하는 public static getInstance() 메서드를 제공합니다. 이 메서드 내부에서 인스턴스를 생성할 때 null 체크 후 생성해서 인스턴스를 리턴 해야 합니다.멀티스레드 환경에서는 위 getInstance메서드를 synchronized 해야 안전합니다. 하지만 전반적인 성능 저하 때문에 일반적으로 아래와 같은 패턴으로 코딩합니다.싱글톤패턴1public class InitializationOnDemandH..
groovygroovy는 jvm용 스크립트언어이며 gradle은 groovy를 사용한 빌드 도구입니다.gradle 소프트웨어 내부에 groovy가 포함되어 있으므로 따로 설치 하지 않아도 됩니다만,여기서는 groovy언어 연습용으로 설치해보도록 합시다. 그루비 다운로드 링크: https://groovy.apache.org/download.html The Apache Groovy programming language - Download* Modules:2.4.X: "ant", "bsf", "console", "docgenerator", "groovydoc", "groovysh", "jmx", "json", "jsr223", "nio", "servlet", "sql", "swing", "test", "tem..
자바 어플리케이션은 main()스레드 외에 병렬로 처리하는 스레드를 같이 실행할 수 있습니다. 보통은 단순하고 긴 작업이나 I/O작업들을 멀티 스레드로 병렬로 작업하는 것이 효율적입니다. 그러나, 너무 많은 스레드를 실행하면 각 스레드간 context switching 에 시간을 더 소비하게 되어 오히려 효율이 떨어지게 됩니다. java.lang.Thread 클래스로부터 extends 하거나 Runnable 인터페이스로부터 implements 해서 스레드를 생성할 수 있습니다. Runnable 구현 방법import java.awt.Toolkit;public class BeepTask implements Runnable { @Override public void run() { Toolkit toolkit..
자바 SWT/JFace 를 이용한 GUI 애플리케이션에서 실행중인 PC의 파일(텍스트)을 읽을 수 있는 파일 열기 대화 상자의 간단한 사용법에 대해 알아보겠습니다.import org.eclipse.swt.SWT;import org.eclipse.swt.layout.FillLayout;import org.eclipse.swt.widgets.*;import org.eclipse.jface.window.ApplicationWindow;import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class TextFileReaderApp extends ApplicationWindow { public Text..
이벤트 처리는 이벤트를 전달하는 이벤트 클래스와 이벤트를 처리하는 리스너가 담당합니다.JFace는 이런 이벤트 처리를 간단하게 해줍니다. SWT 에서 이벤트 처리SWT는 운영체제의 이벤트 큐를 사용합니다.Application의 Display클래스는 해당 큐의 내용을 정렬하는데 readAndDispatch()와 msg 필드를 사용합니다.msg필드는 운영체제의 메시지 큐에 대한 핸들로 동작합니다.해당 이벤트를 최상위 Shell 객체로 보내고 Shell객체는 어떤 위젯이 해당 이벤트를 받을지 결정합니다.Shell은 해당 위젯으로 이벤트를 보내고 해당 위젯은 이 정보를 리스너 라는 인터페이스로 전달합니다.그러면 리스너는 이벤트 핸들러를 호출해 이벤트에 필요한 동작을 수행합니다. Adapter 클래스Adapter..
Composite 클래스컨테이너 위젯은 GUI의 배경 구조를 구성하고 모듈식 코드를 제공합니다.여러 composite 객체가 다른 composte 객체에 결합될 수 있습니다. Composite 클래스의 메소드getChildren() : Control 객체의 배열을 반환getLayout() : composite에 연결한 레이아웃을 반환setLayout(Layout) : composite에 연결할 레이아웃을 설정getTabList() : 탭 순서에 따른 Control 객체의 배열을 반환setTabList(Control[]) : Composite의 위젯들의 탭 순서를 설정 Composite 클래스는 Scrollable 클래스의 하위 클래스 입니다.그래서 모든 Composite 클래스는 스크롤바를 가질 수 있습..
Widget 클래스모든 위젯들의 상위 클래스 입니다. 그러나 위젯을 상속받거나 코드에서 바로 사용하면 안됩니다.하나의 구조로 모든 위젯들을 단일화 하기 위함이기 때문입니다.setData(String Object) : 위젯에 객체를 붙임. 문자열로 접근 가능.getData(String) : 위젯에서 문자열에 대응하는 데이터와 관련된 객체를 반환getStyle() : 위젯의 스타일에 해당하는 정수를 반환getDisplay() : 위젯과 관련된 Display 객체를 반환toString() : 위젯 클래스를 표현하는 문자열 반환dispose() : 위젯과 위젯 자원에 대한 할당을 해제.isDisposed() : 위젯의 할당을 해제했는지에대한 boolean 값 반환 Control 클래스Control클래스의 객체들..
Display classDisplay 클래스가 외관을 보여주는 역할을 하지는 않지만 GUI 자원을 관리하고 운영체제와 소통을 담당합니다.코드에 있는 SWT/JFace 명령들을 운영체제에 호환되도록 바꾸어 전달하는 일을 합니다. 주요 메소드Display() : 플랫폼 자원을 할당하고 Display 객체를 생성.getCurrent() : 사용자 인터페이스 스레드를 반환.readAndDispatch() : Display 객체가 이벤트를 해석해서 리스너로 넘겨 줌.sleep() : Display 객체가 이벤트를 기다림. Shell classShell 클래스의 인스턴스는 위젯, 이벤트들과 연동하며, 시각적인 부분을 구현합니다.운영체제에 접근하기는 하지만 윈도우 열기, 활성화, 최대화, 윈도우 닫기를 추적할 때만 ..
자바에서 메시지 다이제스트 값을 계산하려면 MessageDigest 클래스를 사용합니다.메시지 다이제스트는 소스가 되는 이진(byte) 값에 대한 해시 값을 구하는 것입니다.해시 값도 이진(byte) 값이어서 16진수 String으로 변환해서 읽기 쉽게 변환해서 사용합니다.원본 소스가 같으면 같은 해시 값이 나오고 원본 소스가 달라지면 다른 해시 값이 나오는 특성 때문에 전자 서명이나 파일의 무결성 검증(위변조 여부 감지) 등에 사용됩니다. import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.security.MessageDigest;import java.security.NoSuchAlgorithm..
