[sql] 제약조건

*(테이블에 저장되는)데이터에 대해서 "무결성"을 유지하기 위해 존재한다. *무결성 : 데이터의 정확성, 일관성을 유지한다. *종류로는 NOT NULL, UNIQUE, CHECK,기본키, 외래키 등이 있다.

[sql] 테이블 생성

이미지
*테이블은 데이터를 저장하는 가장 기본적인 객체이다. *새로운 테이블을 생성하기위해선 아래의 문법을 따라야 한다. //스키마 : 테이블의 제약조건을 정의해놓은 것을 뜻하며, (다른테이블과의)관계에 대한  정의 그리고 이를 유지하기위한 제약조건을 정의해놓은 것을 뜻한다. *[스키마.]와 [TABLESPACE 테이블스페이스명] 이 두개는 생략가능하며, 생략할 경우, 디폴트 이름으로 자동설정 된다. 다시말해 기초적인 테이블을 생성할 때에는 간략하게 할 수 있다. CREATE TABLE t_1{     VARCHAR2 column1 not null;          VARCHAR2 column2 not null; };

[spring]회원 관리 예제 - 웹 MVC 개발 > 회원 관리 예제 - 웹 MVC 개발, 등록, 조회

이미지
"Home"페이지 만들기 *새로운 "HomeController"을 추가합니다. *그리고 url 아무것도 없을 경우, "home.html"파일을 열도록 @GetMapping("/")으로 설정합니다. HomeController을 추가합니다. *서버를 구동시키고, "localhost:8080"으로 접속하여 의도한대로 화면으로 제대로 이동하는지 확인합니다. localhost:8080으로 접속하였습니다. *잠깐, 그런데 이미 정적 기본페이지가 존재하는데, 그 페이지가 호출되어야하는게 맞지않은가?? resources > static  > index.html 그렇지 않다, "GetMapping("/")호출이 static > index.html 호출보다 우선순위가 높기때문에 "GetMapping("/")"으로 설정된 페이지가 호출된다. 물론 이것이 없다면 "static > index.html" 페이지가  호출된다.

[spring]스프링 빈과 의존관계 > 자바 코드로 직접 스프링 빈 등록하기

이미지
*@Contorller, @Service, @Repository 등등의 어노테이션을 이용하여 우리는  스프링 컨테이너에 객체를 등록하여 관리하였다. *이외에도 개발자가 직접 객체(즉 bean 을..)을 직접 등록하는 방법도 존재한다. @Configuration *(새로운 생성한)클래스에 "@Configuration"어노테이션을 붙이면, spring 서버가 구동할때  가장 앞의 우선순위로 실행하게 된다. *"@Bean"어노테이션을 이용하면 (개발자가)스프링 컨테이너에 직접 객체를 등록할 수 있다. *하지만 @Controller와 같은 어노테이션은 스프링에서 직접 관리하는 객체임으로 굳치 "@Bean"을  사용하여 객체를 집접 등록할 필요가 없다. *예전에는 ".XML"파일을 이용하여 스프링 환결을 설정하였지만, 요즘은 ".java"파일을 이용하여 환경을  설정하는 추세이다. *생성자를 통한 의존 주입 *"필드주입방식"은 그다지 좋은 방식이 아니다. 그 이유로는  만약 주입해야할 객체를 변경하고자 할 경우, 많은 코드를 변경해야하기 때문이다. 필드 주입 방식은 나쁘다. *그래서 항상 "생성자"을 통해 의존성 주입을 해야 한다. *setter을 통해 주입하는 방법도 있으나 권장하지 않는다. *가장 베스트는 생성자을 통한 방식이다. 생성자를 통해 객체를 주입하자..!! *"@Bean"어노테이션을 이용하여 객체를 (스프링 컨테이너에)직접 등록하는 방법을 알았는데, 여기서 드는 의문은 "@Service, @Repository"등 이미 편리한 어노테이션이 존재하는데  굳이 "@Bean"같은 어노테이션을 사용해야할 경우가 있을까???  ==> 실무에서는 주로 정형화된 컨트롤러, 서비스, 리포지토리 같은 코드는 컴포넌트 스캔을 사용한다. 그리고 정형화 되지 않거나, 상황에 따라 구현 클래스를 변...

[spring]스프링 빈과 의존관계 > 컴포넌트 스캔과 자동 의존관계 설정

이미지
*spring-boot에서 사용되는 "객체"는 모두 "컨테이너"라는 저장공간 안에서 관리된다. *"컨테이너"안에서 특정 객체를 찾기위해선 반드시 어노테이션(표시)이 필요하다  spring-boot에서는 이를 "의존관계"라고 하는가?? @Controller 어노테이션을 명시한다. "@Contorller"라는 어노테이션을 명시하여 해당 "객체"는 spring-boot (객체)컨테이너에서 꺼내사용할 수 있도록 한다. spring-boot는 객체를 컨테이너로 관리한다. 보통 우리는 Controller에서 service을 호출하여 비즈니스을 수행하게 된다. 이때 Service객체를 "new"을 통해 인스턴스를 만들어서 비즈니스 함수를 호출하게되는데... 문제는 (인스턴스를 만든 service가) 하나의 Controller에서만 사용되는 service가 아닐 수 있지않나? 그러므로 이또한 (spring-boot의)컨테이너에 의해 (객체가)관리되도록 해야한다. 그러기 위해선 Service클래스에 "@Service"어노테이션을 명시해줘야 한다. @Service 어노테이션 사용 예 그리고 Controller에서는 (객체를 의존하고자하는(??))클래스에 "@Autowired"어노테이션을 명시한다. @AutoWired 어노테이션 사용 예 정리하자면,  service객체를 가져다 사용하고자할때마다 "new"키워드를 사용하여 객체를 생성하기  보단 "@AutoWired"키워드를 사용하여 spring-boot의 컨테이너가 관리하고 있는 객체를 꺼내 쓰면 된다. 물론 Service에서도 데이터베이스 관련 로직을 수행하기 위해서 "Repository"객체를 사용하고자할 때 위와 같은 방식으로 사용하 되, 이때 사용하는 어노테이션은 "@Repository"을 사...

[spring] 섹션 3. 회원 관리 예제 - 백엔드 개발 > 회원 서비스 개발

[spring] 섹션 3. 회원 관리 예제 - 백엔드 개발 > 비즈니스 요구사항 정리 및 테스트 케이스 작성

이미지
implements      option + enter 비즈니스 요구사항 정리 *클래스 생성 주의사항을 꼭 잃어보시라 MemberService : 서비스 로직을 처리하는 클래스  MemberRopository : 데이터베이스에 접근하여 데이터를 컨트롤 하는 클래스(인터페이스) MemoryMemberRopository : MemberRopository(인터페이스)을 구체화 한 클래스 *프로젝트 트리 controller,domain,repository package src > main > java  >hello.hellospring 경로 밑에 존재해야합니다. *controller : view에서 호출하고자하는 함수를 정의합니다. *service :  *domain :  service에서 데이터베이스에게 데이터를 넘길때(혹은 받아올때) 사용하는 클래스 *repository : 데이터베이스와 연결하는 클래스 테스트 케이스 작성 *junit 생성한 기능을 테스트을 하기 위해선 "실행"해봐야하는데 "실행"해보려면 main함수에서 해당 함수를 호출해보거나, url을 통해 특정 페이지으로  이동해서 button을 클릭해봐야하는게 아닌가 ... 이게 얼마나 번거로운 일인가  그래서 spring-boot에는 테스트할 수 있는 기능을 제공한다. test 파일의 위치를 확인하자 MemoryMemberRepositioy클래스의 함수기능을 테스트하기 위해 테스트용 클래스를 만들어야 한다. 이때 "(테스트 대상 클래스의)이름 + Test"의 방식으로 클래스 이름을 설정한다. 그리고 (당연하게도?) 테스트 하고자하는 클래스의 인스턴스를 생성한다. 테스트 하고자 하는 함수에 "@Test"어노테이션을 붙힌다. 그리고 테스트 함수가 모두 작성 완료 되었다면  함수의 플레이 버튼을 클릭하여 "Run 'MemoryMemberRepositi....' 을 실행시키면 된다. 테스트를 진행하는데...