JSP_게시판

ChoRong0824·2023년 4월 3일
1

Web

목록 보기
24/25
post-thumbnail

2023.04.03
Spring 과 JSP 의 차이점을 알고 싶어, JSP 를 공부하였습니다.
가장 근본인 게시판 프로젝트를 통해, 어떤 차이점이 있는지 확인해보겠습니다.
JSP 먼저 한 후, Spring으로 할 예정입니다.

프로토 타입


로그인화면 구성

  • 거의 css/html 이라고 봐도 무방합니다.

db 구성

  1. 다운로드 , mysql
  2. Mysql 서버 설치
  • MySQL Workbench 에서 사용하는 client를 사용하는 방법 (자세한 방법)
#MySQL Client
ln -s /Applications/MySQLWorkbench.app/Contents/Resources/mysql /usr/bin/mysql
#MySQL Dump
ln -s /Applications/MySQLWorkbench.app/Contents/Resources/mysqldump /usr/bin/mysqldump

#How to fix the "Library not loaded: libmysqlclient.18.dylib (LoadError)" error
sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib
  • 이 코드는 MySQLWorkbench를 사용하여 MySQL 클라이언트와 MySQL 덤프를 실행하려는 macOS 사용자를 대상으로 한 명령어 집합입니다.

  • 첫 번째 줄은 MySQLWorkbench의 "mysql" 및 "mysqldump" 실행 파일을 "usr/bin" 디렉토리에 심볼릭 링크로 만듭니다. 이렇게하면 터미널에서 "mysql" 또는 "mysqldump"를 실행하여 MySQL 서버에 연결하거나 백업을 수행할 수 있습니다.

  • 그러나 때로는 "Library not loaded: libmysqlclient.18.dylib (LoadError)"와 같은 오류가 발생할 수 있습니다. 이것은 libmysqlclient.18.dylib 라이브러리 파일이 찾을 수 없기 때문입니다. 이 경우 두 번째 줄은 /usr/local/mysql/lib 디렉토리에있는 libmysqlclient.18.dylib 파일을 /usr/lib 디렉토리에 심볼릭 링크로 만듭니다. 이것은 libmysqlclient.18.dylib 파일을 /usr/lib로 복사하지 않고도이 파일에 액세스 할 수 있도록합니다. 이렇게하면 MySQLWorkbench가 제대로 작동해야합니다.

맥에서 Mysql 사용

  1. cd/user/local/mysql/bin
  2. ./mysql -u root -p

mysql 명령어

1. CREATE DATABASE BBS : 연결
2. USE BBS; : 접속
3. CREATE TABLE USER(~~); : 테이블 생성
4. 종료 명령어 : exit;

show tables; : 모든 테이블 보기
desc user; : 우리가 만든 유저 테이블 안에 어떤 속성이 있는지 확인

INSERT INTO USER VALUES('gildong',123456','홍길동','남자','gildong@naver.com'); : 데이터 삽입
commit; : 커밋하기
desc user;


  • Mysql 커넥터 다운.
    다운후, lib에 옮겨줌

    프로젝트 속성에 들어가서, java Builde Path 에서 Add JARs.. 한 후 방금 자기가 추가한 파일을 추가해줍니다.

  • 게시판 데이터 구축

bbsAvaulable : 현재 글이 삭제되었는지 아닌지 알려주는 거임. -> 항상 db에는 삭제된 글 전부까지 다 포함해서 저장할 수 있도록 해야합니다.

  • 자바빈즈 구현
    하나의 게시글 정보를 담을 수 있는 인스턴스를 만들 수 있는 트리임. (게시글 하나를 관리할 수 있는 자바 파일로 생각하면 됨)

  • 글쓰기 기능 구현
    (bbs.jsp 참고해서 만듬)

  • 데이터 접근 객체 생성
    BbsDAO.java -> (joinAction)을 활용해서 writeAction 생성

  • 글쓰기 목록 구현
    데베에서 글 목록 가져오는거 구현해야함.
    BbsDAO에 2개의 함수 추가하면 됨.

이제 이 2개의 함수를 이용해서 게시판 메인 화면에서 실제로 게시판의 목록을 출력하는 방법 구현

를 추가해줌,

write 봐야함.

  • 필자는 계속 게시글 목록이 안나오는 에러가 발생했습니다. 뭐가 문제인지 몰랐어서 코드 분석을 하게되었습니다.

    이게 왜 문제지 ? 라고 생각햇고, 마저 bbs.setBbsAvaulable(rs.getInt(6)); 로 수정하게 되면, 에러코드가 아니게 되지만, 이렇게되면 db와의 충돌이 발생하게 됩니다.
    왜냐하면 이미 SQL 문을 가져올 때 bbsAvailable 로 받기 때문입니다.
    따라서,

    이렇게 작성하고 생성자가 문제일 수도 있으니, 생성자를 확인해봅시다.
    ㅋㅋ.. 역시나 생성자 문제였습니다.

    맨 처음에는 런타임 에러 및 에러코드가 발생하지 않고 작성을 다했는데, 직접 테스팅 했을 때에는 게시글 목록이 보이지 않아서 당황했었습니다.
    그래서 코드를 얼핏 뜯어보았으나, 문제점을 알지 못했었습니다.
    그래서 처음부터 코드에 대해 분석하였더니 생성자는 아닐까 라는 생각을 하게되었습니다.

    db와의 연관관계를 한번 더 생각해보고 구현을 해야겠다는 생각이 들었습니다.

또잉?

게시글 작성하고 나면, 해당 문구가 계속 발생함.
바보같은 자식,,

userID != null로 되어있었따... ㅋㅋㅋㅋ
유저아이디가 null 로 해줬고, 즉, 비어있지않았을 때에(로그인해있을때)로그인을 하세요 라고 출력하면
바보다.


위 코드를 보고 맞는 코드만 타이핑 해주시면 됩니다.

  • 데이터 베이스에서 게시글 확인

    글쓰기 기능은 정상작동하였음. BUT 게시글 목록은 안보임.
    -> 게시글 목록 코드 다시 확인.

BbsDAO


게시글 목록을 알아보는 코드
이후, bbs.jsp로 가서 코드 확인.

???? 아무리 봐도 코드가 맞는데 뭐가 문제지..?

바보같다.. 정말로,, 개발자가 콘솔창에서 에러를 안찾고 구글링만 오지게 하는 바보 같은 놈이었다.
콘솔창에서의 에러는 소중함을 한번 더 깨닫게 된다.
at java.base/java.lang.Thread.run(Thread.java:833) java.sql.SQLSyntaxErrorException: Unknown column 'bbsAvailable' in 'where clause'
이유 :
이 오류 메시지는 SQL 쿼리에서 'where clause'에서 'bbsAvailable'이라는 컬럼을 찾을 수 없기 때문에 발생합니다. 이는 해당 테이블에 'bbsAvailable'이라는 컬럼이 존재하지 않는다는 것을 나타냅니다.

이러한 경우, 다음과 같은 몇 가지 원인이 있을 수 있습니다.

  1. 컬럼 이름이 잘못되었을 경우
  • 오타, 대소문자 구분 등의 이유로 컬럼 이름이 잘못 입력된 경우가 있습니다. 이 경우, 정확한 컬럼 이름을 사용하여 쿼리를 다시 작성해야 합니다.
  1. 해당 컬럼이 다른 테이블에 속해있을 경우
  • 컬럼 이름을 잘못 입력하더라도 다른 테이블에 해당 컬럼이 존재할 경우, 위와 같은 오류가 발생합니다. 이 경우, 정확한 테이블 이름과 컬럼 이름을 사용하여 쿼리를 다시 작성해야 합니다.
  1. 해당 컬럼이 아직 생성되지 않았을 경우
  • 컬럼을 추가하는 ALTER TABLE 쿼리를 실행하기 전에 해당 컬럼이 아직 생성되지 않았을 경우, 위와 같은 오류가 발생합니다. 이 경우, 해당 컬럼을 생성하는 ALTER TABLE 쿼리를 먼저 실행해야 합니다.

이러한 원인들 중 적합한 조치를 취하여 쿼리를 수정하면 이 문제를 해결하시면 됩니다.

찾았다 요놈,

끝에 보면 bbsAvaulable로 되어있는 것을 확인할 수 있습니다.
자, 이제 수정 해주면됩니다.

컬럼 수정

ALTER TABLE 테이블_이름 CHANGE bbsAvaulable bbsAvailable BOOLEAN NOT NULL DEFAULT false;
위의 코드에서 '테이블_이름'은 변경하려는 테이블의 이름으로 대체해주시고, 'bbsAvaulable'은 현재의 컬럼 이름이며, 'bbsAvailable'은 변경하려는 새로운 컬럼 이름입니다.

위 코드를 실행하면 'bbsAvaulable' 컬럼 이름이 'bbsAvailable'로 변경됩니다. 변경하고자 하는 데이터 타입과 제약 조건에 따라서 위 ALTER TABLE 문을 수정해주시면 됩니다.

  • 목록 확인

css


분류와 내용에 줄을 만들어주면 깔끔할 것 같아 스타일 추가.

대충 칸을 만들어줌.


수정

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SUPDATE BBS SET bbsTitle ='ㅁㄴㅇㄴㅁㅇㅁㅇㅁㅇ', bbsContent = 'asdsad' at line 1

  • 에러 메시지를 보면 SQL 구문에 오류가 있습니다. "SUPDATE"은 MySQL에서 지원하지 않는 명령어이기 때문에 오류가 발생한 것입니다.
    정확한 명령어는 "UPDATE"입니다.

    이렇게 되어있었던 것입니다. 이것을 수정하고 나면, 정상작동합니다.

JSP로 게시판 한 이유,

요즘은 SPRING이 많이 쓰이는 추세이며, 그 이유는 크게3가지 이유에 대해 알고 가겠습니다.

1. Spring은 JSP보다 더 유연하고 모듈화가 잘되어 있어서 더 큰 규모의 애플리케이션을 개발하기에 적합합니다.

2. Spring은 JSP와는 달리 의존성 주입(Dependency Injection)을 기반으로 하여 객체 간의 결합도를 낮출 수 있습니다.

3. Spring은 AOP(Aspect-Oriented Programming)를 지원하여 횡단 관심사(Cross-cutting Concerns)를 처리하기 용이하며, 테스트와 유지보수가 편리합니다.


근데 왜 ?

Spring이 아니라 JSP를 통해 Toy 프로젝트를 했냐라고 질문을 하실 수 있습니다,<
Spring은 기본적으로 JSP를 지원하므로 Spring에서 JSP를 사용하는 경우가 많습니다.
따라서 JSP를 공부하면 Spring을 더욱 깊이 이해하고 활용할 수 있습니다.
또한, JSP는 여전히 많은 웹 애플리케이션에서 사용되고 있으므로,
기존 JSP 기반의 웹 애플리케이션 유지보수 및 개발에 필요할 수 있습니다.
또한,

JSP를 공부하면 웹 애플리케이션의 생명주기, 요청-응답 모델, 서블릿, JSTL 등의 개념을 이해하는 데 도움이 되기 때문에 공부 및 토이 프로젝트를 진행하게 되었습니다.


profile
컴퓨터공학과에 재학중이며, 백엔드를 지향하고 있습니다. 많이 부족하지만 열심히 노력해서 실력을 갈고 닦겠습니다. 부족하고 틀린 부분이 있을 수도 있지만 이쁘게 봐주시면 감사하겠습니다. 틀린 부분은 댓글 남겨주시면 제가 따로 학습 및 자료를 찾아봐서 제 것으로 만들도록 하겠습니다. 귀중한 시간 방문해주셔서 감사합니다.

0개의 댓글