" async="async"> ', { cookie_domain: 'auto', cookie_flags: 'max-age=0;domain=.tistory.com', cookie_expires: 7 * 24 * 60 * 60 // 7 days, in seconds }); 일단 :: 일단

get 방식

get - 가져오다 

get 방식은 어떠한 정보를 가져와서 조회할 때 사용하는 방식이다.

 

[ GET방식의 특징]

  • URL에 변수(데이터)를 포함시켜 요청한다.

  • 데이터를 Header(헤더)에 포함하여 전송한다.

  • URL에 데이터가 노출되어 보안에 취약하다.

  • 전송하는 길이에 제한이 있다.

  • 캐싱할 수 있다.

 

post 방식

post 제출하다

post방식은 데이터를 서버로 보내 추가하거나 수정하기 위해 사용되는 방식이다.

[ POST방식의 특징 ]

  • URL에 변수(데이터)를 노출하지 않고 요청한다.

  • 데이터를 Body(바디)에 포함시킨다.

  • URL에 데이터가 노출되지 않아서 기본 보안은 되어있다.

  • 전송하는 길이에 제한이 없다.

  • 캐싱할 수 없다.

 

 

출처 : https://mangkyu.tistory.com/17

 

자바 서블릿(Java Servlet)이란?

자바에서 동적인 웹페이지를 만들기 위한 기술 중의 하나

 

 

서블릿과 JSP 차이

JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면,

서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다.

 

서블릿에는 JAVA, HTML 모두 작성이 가능합니다.

그래서 HTML로 홈페이지의 기본 틀을 만들어주고 그 안에 내용을 채우는 방식으로 만들어 나갑니다.

-> 그 안의 내용들은 자바 코드를 이용해서 데이터를 가져올 수 있으므로 동적 프로그래밍이 가능해짐.

 

하지만 HTML을 서블릿 클래스에 작성하는 건 매우 까다로운 일입니다.

서블릿 예제

간단한 HTML 소스 정도는 괜찮지만 많은 양의 HTML을 서블릿을 통해 코딩하는 건 몹시 힘들고, 쌍따옴표 하나에도 에러가 나기때문에 비효율적입니다. 그래서 HTML에 JAVA코드를 넣기 위해 JSP가 나오게 됐다고하네요.

 

- Sevlet은 JAVA에 HTML이 삽입/ 동적인 웹을 개발할 때 사용하는 기반 기술로서 웹에서 자바 프로그래밍을 할 수 있음

- JSP는 HTML에 JAVA가 삽입

- 서블릿클래스는 컴파일 과정과 등록 과정이 필요, JSP는 필요없음

- 간단한 로직을 구현할 때는 JSP가 간편

- 요즘은 JSP 기술과 Servlet 기술을 혼용한 MVC 프로그래밍 방법을 권장함

- 프로그램의 기능을 구현하는 복잡한 로직은 서블릿 클래스 안에 기술, 그 결과를 출력하는 일은 JSP 페이지가 담당


출처: https://private.tistory.com/4[공부해서 남 주자]

출처: https://private.tistory.com/19?category=704792 [공부해서 남 주자]

 

 

자바 서블릿은 자바 EE 사양의 일부분으로, 주로 이 기능을 이용하여 쇼핑몰이나 온라인 뱅킹 등의 다양한 웹 시스템이 구현되고 있다.

 

비슷한 기술로는  등을 이용한 CGI, PHP를 아파치 웹 서버 프로세스에서 동작하게 하는 mod_php, 마이크로소프트사의 IIS에서 동작하는 ASP 등이 있다. CGI는 요청이 있을 때마다 새로운 프로세스가 생성되어 응답하는 데 비해, 자바 서블릿은 외부 요청마다 프로세스보다 가벼운 스레드로써 응답하므로 보다 가볍다. 또한, 자바 서블릿은 자바로 구현되므로 다양한 플랫폼에서 동작한다.

 

출처 : 위키백과

 

좀 더 간단하게 웹 프로그래밍에서 서블릿은 아래와 같다.

 

웹 프로그래밍에서 클라이언트의 요청을 처리하고 그 결과를 다시 클라이언트에게 

전송(응답)하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그래밍 기술

 

출처 : https://mangkyu.tistory.com/14

 

서블릿 컨테이너란?

서버에 서블릿을 만들었다고 해서 스스로 작동하는 것이 아니고, 서블릿을 관리해주는 것이 필요한데 그러한 역할을 하는 것이 바로 서블릿 컨테이너입니다. 예를 들어, 서블릿이 어떠한 역할을 수행하는 정의서라고 보면, 서블릿 컨테이너는 그 정의서를 보고 수행한다고 볼 수 있습니다. 서블릿 컨테이너는 클라이언트의 요청(Request)을 받아주고 응답(Response)할 수 있게, 웹서버와 소켓을 만들어 통신하며 대표적인 예로 톰캣(Tomcat)이 있습니다. 톰캣은 실제로 웹서버와 통신하여 JSP(자바 서버 페이지)와 Servlet이 작동하는 환경을 제공해줍니다.

 

JSP란?

Java 코드가 들어가 있는 HTML 코드

서블릿은 자바 소스코드 속에 HTML코드가 들어가는 형태인데, JSP는 이와 반대로 HTML 소스코드 속에 자바 소스코드가 들어가는 구조를 갖는 웹어플리케이션 프로그래밍 기술입니다. 

 

출처 : https://mangkyu.tistory.com/14

interface란?

Java에서 abstract, final과 함께 대표적인 규제이며 Java가 추상화를 위해 제공하는 가장 유용한 도구이다.

어떤 클래스가 있고 그 클래스가 특정한 인터페이스를 사용한다면 그 클래스는 반드시 사용한 인터페이스의 메소드들을 구현해야 한다.

만약 인터페이스에서 강제하고 있는 메소드들을 구현하지 않으면 컴파일 조차 되지 않는다.

 

interface 규칙

- 인터페이스에 정의되는 멤버들의 접근제어자는 public이다.

- 하나의 클래스는 복수개의 인터페이스를 구현할 수 있다.

- 인터페이스 상속이 가능하다.

- 인터페이스는 어떤 일을 하겠다는 기능만 정의해 놓는다. 인터페이스에는 어떻게 하겠다는 구현 방법은 나타나 있지 않다. 그것은 인터페이스를 구현한 클래스들이 알아서 결정할 일이다.

 

클래스 A는 인터페이스 I를 구현한다.

클래스 A 뒤의 implements I는 이 클래스가 인터페이스 I를 구현하고 있다는 의미다. 그것은 3행의 interface I의 멤버인 public void z() 메소드를 클래스 A가 반드시 포함하고 있어야 한다는 뜻이다.

 

인터페이스와 상속은 다르다. 상속이 상위 클래스의 기능을 하위 클래스가 물려받는 것이라고 한다면, 인터페이스는 하위 클래스에 특정한 메소드가 반드시 존재하도록 강제한다.

 

interface와 abstract 차이

인터페이스와 추상 클래스는 서로 비슷한 듯 다른 기능이다. 인터페이스는 클래스가 아닌 인터페이스라는 고유한 형태를 가지고 있는 반면 추상 클래스는 일반적인 클래스다. 또 인터페이스는 구체적인 로직이나 상태를 가지고 있을 수 없고, 추상 클래스는 구체적인 로직이나 상태를 가지고 있을 수 있다.

 

interface 실질적인 쓰임 : https://opentutorials.org/course/1223/6063

위 내용은 생활코딩 강의와 토비의 스프링 내용을 정리한 것이다.

abstract = 추상

Java에서 abstract는 상속을 강제하는 일종의 규제이다.

abstract 클래스나 메서드를 사용하기 위해서는 반드시 상속해서 사용하도록 강제한다.

 

추상 클래스 사용방법

- 추상 클래스를 사용하기 위해서는 추상 클래스를 상속하는 다른 클래스를 정의하여 추상 메서드를 오버라이딩하여 사용한다.

- 추상 메소드에는 본체가 없다.(ex. public abstract int b();)

- 추상 클래스 내에는 추상 메서드가 아닌 메서드가 존재할 수 있다.

- 추상 메소드를 만들면 자동으로 그 클래스는 추상 클래스가 된다.

추상 클래스 사용하기

A 클래스는 b라는 추상 메서드를 가지고 있기 때문에 자동으로 추상 클래스가 된다.

추상 메소드인 b메서드에는 본체가 없다.(본체가 있으면 에러 발생)

추상 클래스는 추상 메서드(b)가 아닌 다른 메서드(d)를 가질 수 있다.

 

클래스 B는 추상 클래스 A를 상속하고 추상 메서드 b를 오버라이딩한다.

 

메인 메서드에서 B 클래스를 선언하여 사용할 수 있다. A클래스를 사용하면 에러가 발생한다. 꼭 A클래스를 상속하는 클래스를 사용해야 한다.(상속 강제)

 

추상 클래스를 사용하는 이유

상속을 강제하기 위한 것이다.

즉, 부모 클래스에는 메서드의 시그니처만 정의해 놓고 그 메서드의 실제 동작 방법은 이 메서드를 상속받은 하위 클래스의 책임으로 위임하고 있다.

 

공통적인 로직은 추상 클래스에 작성하고

하위 클래스에는 용도에 따라 달라지는 로직을 작성한다.

 

참고 : https://opentutorials.org/course/1223/6062

위 내용은 생활코딩 강의 내용을 정리한 것이다.

접근제어자란?

클래스 안에 소속되어 있는 멤버(변수, 메서드)에 접근할 수 있는 권한을 차등 부여하는 것이고 멤버 접근 제어자와 클래스 접근 제어자가 있다.

 

접근제어자를 왜 사용하는가?

접근 제어자를 사용하는 이유는 사용자에게 객체를 조작할 수 있는 수단만을 제공함으로써 결과적으로 객체의 사용에 집중할 수 있도록 돕기 위함이다.

 

프로그래밍은 기존에 작은 것에서 거대한 것으로, 단순한 것에서 복잡한 것으로, 단독 작업에서 협업으로 나아가게 되었다.

그러한 변화에 수용하기 위해서 다양한 규제가 필요하게 되었다.(법이 생긴 것)

그 규제들로는 데이터 타입, 리턴 타입, 접근제어자, 추상클래스, final, 인터페이스 등이 있다.

 

자유에 질서를 부여함으로서 자유를 촉진하는 것이다.

 

 

멤버 접근 제어자

 

클래스의 접근 제어자는 총 2개로 public과 default이다. default는 접근 제어자를 붙이지 않은 경우 default가 된다. 클래스의 접근 제어자는 패키지와 관련된 개념이다. 즉, 접근 제어자가 public인 클래스는 다른 패키지의 클래스에서도 사용할 수 있고, default인 경우는 같은 패키지에서만 사용 가능하다.

 

public 클래스가 포함된 소소코드는 public 클래스의 클래스 명과 소스코드의 파일명이 같아야 한다.

 

참고 : https://opentutorials.org/course/1223/6061

위 글은 생활코딩 강의 내용 정리한 것이다.

JDBC로 MySQL 연동중 에러가 발생한다.

Loading claLoading class 'com.mysql.jdbc.Driver'. This is deprecated. The new driver class is 'com.mysql.cj.jdbc.Driver'.

 

에러 메시지도 아주 친절하다.

로딩하고 있는 클래스는 com.mysql.jdbc.Driver이다. 이 것은 deprecated 하다.

새로운 드라이버 클래스는 com.mysql.cj.jdbc.Driver이다.

 

결론은 JDBC 연결할 때 드라이버 정보를 com.mysql.jdbc.Driver에서 com.mysql.cj.jdbc.Driver로 바꿔주면 된다.

 

현재 JDBC 커넥터 라이브러리로 mysql-connector-java-8.0.16을 사용하고 있다. 클래스가 바뀐 것이다.

MySQL 버전 확인;

 

참고 : https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-usagenotes-connect-drivermanager.html

Can not connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Can not connect to local MySQL server through socket '/tmp/mysql.sock'(38)

 

위 에러 때문에 MySQL을 10번은 재설치한 것 같다.

 

소켓을 통해서 로컬 MySQL에 접속할 수 없다고 한다.

 

소켓은 창구같은건데 mysql.sock이라는 소켓을 통해서 MySQL에 접속해보려고 했는데 안된다는 것이다.

 

그래서 저 소켓을 알맞게 준비하면 접속이 될 것 같다.

 

mysql_config --socket

 

먼저 위 명령어로 소켓의 위치를 확인한다.

 

소켓의 위치가 다음과 같다고 나온다. /tmp/mysql.sock

 

그리고 저 경로를 연결 정보가 들어가 있는 config 파일에 넣어준다.

 

위 에러로 해결이 되었지만 링크 설정이나 권한 설정 등의 다른 방법으로 해결한 유저들도 많았다.

 

방법은 여러개지만 결국 저 소켓이 문제라는 것!

 

항상 에러 로그를 잘 확인하자!!

현재 Mac Mojave를 사용중이고 MySQL을 설치하고자 한다.

검색해보니 여러 방법들 중에 HomeBrew를 통해서 간단하게 설치하는 방법이 있었다.

 

첫(?)설치는 아주 간단했다. 설치 후 접속도 하고 서버 종료와 시작을 몇번하다보니 재시작하는 과정에서 에러가 발생했다.

그리고 몇번의 uninstall과 intall, 재부팅 과정을 겪었다.

 

설치 시 설정

https://junhobaik.github.io/mac-install-mysql/

기존 MYSQL 삭제 및 설치

https://coderwall.com/p/os6woq/uninstall-all-those-broken-versions-of-mysql-and-re-install-it-with-brew-on-mac-mavericks

 

홈브루를 통해서 설치를 하는데 중간에 에러가 발생했다.

해결방법들을 정리해보자.

1. Fatal error: Illegal or unknown default time zone 'Asia/Seoul'

2. Newly created data directory /usr/local/var/mysql/ is unusable. You can safely remove it.

 

그리고 포스트 인스톨이 성공적으로 완료되지 못했다는 문구가 보인다.

그리고 brew postinstall mysql 명령어를 통해서 다시 시도하라고 되어있다.

 

1. 타임존 에러

이 에러는 config 파일 수정을 통해서 해결했다.

vi /usr/local/etc/my.cnf

위 명령어로 config 파일을 수정한다.

기존에는 에러문구에서 볼 수 있듯 default-time-zone='Asia/Seoul' 였다.

Asia/Seoul 을 +9:00으로 변경했다.

참고 : https://offbyone.tistory.com/318

 

두번째 에러는 rm -rf /usr/local/var/mysql/ 명령어로 디렉터리를 삭제했다.

 

그리고 brew postinstall mysql 명령어를 실행하면 에러가 발생하지 않는다.

 

다음 mysql_secure_intallation 명령어를 실행한다.

+ Recent posts