클래스패스(classpath) 자바의 가상머신(JVM)이 컴파일된 클래스 파일(.class 확장자 파일)을 실행시킬 때, 클래스패스(classpath)에 설정된 경로에서 파일을 찾아봅니다. 그래서 자바파일을 (터미널 환경에서 직접) 컴파일 할 때는 아래와 같이 클래스패스 경로를 지정해주어야 합니다. $java -classpath ".:bin" Hello 옵션으로 클래스패스를 주지 않으면 현재 디렉토리에서만 클래스를 찾게 되지만, 만약 클래스들이 현재 디렉토리와 다른 경로에 존재한다면 위의 bin과 같이 명시해주어야 합니다. :(콜론)을 이용하여 경로를 구분합니다. (윈도우는 ; 세미콜론으로 구분합니다.) 위와 같이 설정하면 현재폴더와 bin 폴더 두 군데에서 찾아보게 됩니다.위의 예제와 같이 클래스패스가..
객체의 캡슐화 TV라는 객체를 생각해봅시다. 사용자는 전원을 키고, 채널과 음량을 조절 할 줄 안다면 TV를 문제 없이 사용할 수 있습니다. TV의 내부적인 모습이나 원리는 알 필요가 없습니다. 하지만 사용자가 TV 객체에 대한 충분한 이해 없이 중요한 부품들을 건들이게 된다면, TV는 개발자가 의도한 대로 혹은 사용자가 예상한대로 작동하지 않을 확률이 매우 높습니다. 이러한 이유로 사용자가 객체에 접근할 수 있는 영역을 제한하는 것을 객체의 캡슐화(encapsulation)라고 합니다. 캡슐화의 장점사용자가 불필요한 부분을 접근하지 못하게 하여, 객체의 오용을 방지 할 수 있습니다. (항상 개발자와 사용자가 다를 수 있음을 기억해야 합니다.)객체의 내부가 바뀌어도 그 객체의 사용방법이 바뀌지 않습니다...
Spring Security (스프링 시큐리티) 스프링 시큐리티를 이용하면 개발시에 필요한 사용자의 인증, 권한, 보안 처리를 간단하지만 강력하게 구현 할 수 있습니다. 일반적인 웹 환경에서 브라우저가 서버에게 요청을 보내게 되면, DispatcherServlet(FrontController)가 요청을 받기 이전에 많은 ServletFilter(서블릿 필터)거치게 됩니다. Spring Security도 서블릿 필터로써 작동하여 인증, 권한과 관련한 처리를 진행하게 됩니다. (본래 서블릿필터는 WAS(Web Application Server)에서 담당하는데 스프링은 이 서블릿필터들을 직접 관리하기 위해서 DelegatingFilterProxy를 web.xml에 설정하여서, 스프링에서 설정된 서블릿 필터 빈..
JDBC(Java DataBase Connectivity) JDBC란 자바에서 데이터베이스를 다루기 위한 API 입니다. Spring을 이용하게되면 JDBC를 직접 다루는 일은 없으나, SpringJDBC, MyBatis, JPA 등등 데이터베이스와 관련한 API는 JDBC를 기본으로 하여 동작하게 됩니다. 예제는 직접적인 코드 설명을 주로 하고, MAVEN과 mariaDB를 이용해서 진행했습니다. 1) SQL에 맞는 의존성을 MAVEN에 넣는다. (참고로 DBMS 버젼과 maven에 주입할 client의 버젼은 다른 것입니다.) org.mariadb.jdbc mariadb-java-client 2.3.0 2) 리플렉션을 이용하여, SQL에 맞는 드라이버를 등록한다. Class.forName("org.m..
셀프조인 (self join) 일반적으로 JOIN은 연관된 두 개의 테이블을 연결하기 위해서 사용되지만, 자신의 테이블을 참조하는 셀프조인도 가능합니다.예제로 사용될 테이블은 사원의 정보를 담고 있는 테이블로 아래와 같습니다. SELECT * FROM employee; +----+-----------+-------------+ | id | name | superior_id | +----+-----------+-------------+ | 1 | 김사장 | NULL | | 2 | 정과장 | 1 | | 3 | 최대리 | 2 | | 4 | 이대리 | 2 | | 5 | 박고문 | NULL | +----+-----------+-------------+ 사원의 id와 이름 그리고 직속상관(superior)의 id를..
1. Entitiy간의 연관관계(방향)이란? 데이터베이스상에서는 관계를 맺어주기만 하면 자동으로 서로간의 양방향 참조가 가능합니다. 하지만 객체지향의 (Entity) 클래스간에는 '참조 방향'을 지정해주어야 하는데, 어떤 '방향성'을 고려해야하는지는 굉장히 중요합니다. (처음에는 Entity간의 양방향성을 남발했지만, 공부를 지속하면서 양방향성의 위험성을 알게 되었습니다.) 2. 단뱡향vs양방향 방향을 가져야 하는 경우는 어떤 경우인지 부터 보겠습니다. 먼저 객체지향적인 관점에서 생각해보면 A클래스와 B클래스가 연관관계일때, A클래스는 B클래스를 사용하게 되고 이런 경우에 방향성을 갖습니다. 반대로 B클래스가 A클래스를 사용하게 되면 역시 방향성을 갖습니다. 그러나 방향성을 남발하게 되면 성능상의 큰 문..
다대다(M:N) 관계 두 개의 테이블이 서로의 행에 대해서 여러개로 연관 되어 있는 상태를 다대다(M:N)관계라고 합니다. 예를 들어 보겠습니다. 한명의 학생이 여러 수업을 수강하고, 한 수업은 여러 학생을 수용합니다. 이를 ERD로 표현하면 아래와 같습니다. 학생테이블과 수업테이블이 다대다 관계로 연관되어 있다. 다대다(M:N) 구현하기 논리적으로 다대다관계의 표현은 가능하지만, 2개의 테이블만으로 구현하는 것은 불가능 합니다. 다대다관계를 실제로 구현하기 위해선 각 테이블의 PrimaryKey를 외래키(FK)로 참조 하고 있는 연결테이블(매핑테이블)을 사용해야 합니다. 이를 ERD로 표현하면 아래와 같습니다. '학생테이블'과 '학생_수업테이블'이 일대다 관계로 연관되어 있고, '학생_수업테이블'과 '..