[이전 글]

2021/01/11 - [IT/spring] - [투표사이트만들기] Eclipse에서 Spring boot 설치하기 - 1

 

[투표사이트만들기] Eclipse에서 Spring boot 설치하기 - 1

파이널 프로젝트로 투표 사이트를 만든다. 개발하기 전에 개발 환경 설정을 기록하려고 한다. 아래 목차 순서대로 정리할 것임! <목차> spring boot 설치 thyemleaf 설치 mysql 설치 실행해보기 1. Eclipse

song-yujin.tistory.com


 

 

앞에서 VotingHomePage 프로젝트를 만들때 의존성으로 Lombok도 추가했었다.

이것은 VotingHomePage 프로젝트에 Lombok 의존성을 추가한다는 것이고 개발도구인 이클립스에서도 Lombok을 쓰려면 따로 추가를 해줘야한다. 

 

2. Eclipse에 Lombok 설치


projectlombok.org/download

 

위에 사이트를 들어가서 Lombok JAR 파일을 다운받는다. 

 

그리고 다운로드된 JAR 파일을 더블클릭하면 아래 화면이 나온다. 

Install / Update 를 누르면 된다! 

 

 

이렇게 설치해서 Eclipse가 실행될 때 Lombok이 같이 실행될 수 있도록 한다. 

이클립스 실행 파일인 eclipse.ini 를 확인해보면 lombok jar가 추가되어있는 것을 확인할 수 있다. 

 

 

[이전 글]

2021/01/11 - [IT/spring] - [투표사이트만들기] MySQL Workbench - 4

 

[투표사이트만들기] MySQL Workbench - 4

[이전 글] 2021/01/11 - [IT/spring] - [투표사이트만들기] Eclipse에서 Thymeleaf 설치하기 - 3 [투표사이트만들기] Eclipse에서 Thymeleaf 설치하기 - 3 [이전 글] 2021/01/12 - [IT/spring] - [투표사이트만들..

song-yujin.tistory.com


5. Spring boot + Thymeleaf + JPA + MySQL 개발


개발 환경 설정까지 다 끝났으니 이제 한번 간단하게 실습? 해보려고 한다.

JPA는 goddaehee.tistory.com/209 블로그 참고하면 좋을 것 같다ㅎㅎ (블로그님 감사합니당)

 

천천히 따라오기만 하면 쉽.. 다..

 

 

개발해볼 것은!!! 목표는!!!

  • voteDB에서  sysadmin 테이블에 관리자 아이디와 관리자 카테고리 전체를 조회하여 화면에 나오도록 할 것 

 

[결과 화면]

 


 

 

 

이제 시작..!🙌

 

 

이전에 이미 생성한 VotingHomePage 프로젝트를 보면 application.properites를 볼 수 있다. 

 

 

 

 

.properites 보다 .yml 쓰는 걸 추천한다고 선배한테 들어서 바꿀 것이다.

 

 

 

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/voteDB?serverTimezone=UTC
    username: yujin
    password: 1234
  jpa:
    hibernate:
      ddl-auto: update
    show-sql: true
  thymeleaf:
    prefix: classpath:templates/
    suffix: .html
    cache: false

그리고 이렇게 설정을 해준다.  3번째 줄에서 voteDB는 데이터베이스 이름이다. 알맞게 변경해줘야 함!

username과 password도 ..! 

소스코드는 접은 글로 사진 아래에 같이 첨부했다.

 

 

그리고 아까 build.gradle에서 타임리프 의존성도 따로 추가했으니 Pass!

 

 

 

 

 

 

controller, dao, dto, service 패키지를 순서대로 일단 만들어준다. 

 

 

 

  • dao.UserRepository (class)

package com.example.demo.dao;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.example.demo.dto.UserDTO;

@Repository
public interface UserRepository extends JpaRepository<UserDTO, Integer>{ 

}

 

그리고 dao에서 UserRepository 인터페이스를 만들어준다.

 

[코드 설명]

코드를 보면 위에 @Repository를 붙인다.

Repository는 JPA와 같은 ORM을 사용하게 되면 객체 단위로 테이블을 관리한다. (DAO 역할을 대신함)

 

extends JpaRepository<UserDTO, Integer> => JPA 인터페이스를 확장을 해야 그 안에 메서드를 사용할 수 있다.  

안에 <UserDTO, Integer>는 사용할 DTO와 그 테이블의 PK 데이터 타입을 작성한다. 

 

 

 

 

 

 

  • service.UserService (interface)

package com.example.demo.service;

import java.util.List;
import com.example.demo.dto.UserDTO;

public interface UserService {

  List<UserDTO> getAllUser();
}

 

  • service.UserServiceImpl (class)

package com.example.demo.service;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.demo.dao.UserRepository;
import com.example.demo.dto.UserDTO;

@Service
public class UserServiceImpl implements UserService{

  @Autowired  //자동 연결 
  private UserRepository userRepository;
  
  
  @Override
  public List<UserDTO> getAllUser() {
    
    return userRepository.findAll();

  }

}

 

[코드 설명]

DB로부터 UserDTO를 list로 가져오기 위한 메소드를 작성한다. 

(인터페이스랑 인터페이스 구현 객체 같이 올림)

 

 

 

 

 

  • dto.UserDTO (class)

package com.example.demo.dto;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;

@Entity
@Table(name = "sysadmin")
@Data
public class UserDTO {

  @Id
  @Column(name = "ADMIN_SEQ")
  private int adminSeq;

  @Column(name = "ADMIN_CATG")
  private String adminCatg;

  @Column(name = "ADMIN_ID")
  private String adminID;

  @Column(name = "ADMMIN_PW")
  private String adminPW;

}

 

[코드 설명]

가져올 sysadmin 테이블의 정보를 작성해준다. 

12줄은 테이블 이름, 16줄 @Id는 adminSeq 이 이 테이블의 PK라는 것을 의미한다. 

 

 

 

 

 

  • controller.MainController(class)

package com.example.demo.controller;

import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView;
import com.example.demo.dto.UserDTO;
import com.example.demo.service.UserService;

@Controller
public class MainController {

  @Autowired
  private UserService userService;

  @GetMapping(value = "/")
  public ModelAndView main() {

    ModelAndView mv = new ModelAndView();
    List<UserDTO> userList = userService.getAllUser();
    mv.addObject("userList", userList);
    mv.setViewName("index");
    return mv;
  }

}

 

[코드 설명]

ModelAndView는 Model 인터페이스를 구현한 클래스로 객체 데이터를 뷰로 넘기는 데 사용을 한다. 

 

 

 

 

 

 

  • templates.index(html)

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>테스트</h1>
	<tr th:each="sysadmin : ${userList}">
		<td th:text="'id : ' + ${sysadmin.adminID}"></td>
		<td th:text="'admin catg : ' + ${sysadmin.adminCatg}"></td>
		<p/>
	</tr>
</body>
</html>

 

알맞게 작성해주면 끝이다.

 

 

 

 

 

실행은 프로젝트에서 우클릭해서 Run As > Spring Boot App을 해주면 된다.

 

그러면 앞에 있는 [결과 화면]이 나온다!

[이전 글]

 

2021/01/11 - [IT/spring] - [투표사이트만들기] Eclipse에서 Thymeleaf 설치하기 - 3

 

[투표사이트만들기] Eclipse에서 Thymeleaf 설치하기 - 3

[이전 글] 2021/01/12 - [IT/spring] - [투표사이트만들기] Eclipse에 Lombok 설치하기 - 2 [투표사이트만들기] Eclipse에 Lombok 설치하기 - 2 [이전 글] 2021/01/11 - [IT/spring] - [투표사이트만들기] Eclipse..

song-yujin.tistory.com


 

MySQL 부분은 이전에 올렸던 글이 있다. 그것을 보고 참고하면 된다.

 

그런데 여기서는 이클립스에서 mysql 쿼리를 작성하고 실행시키지 않고 mysql workbench에서 실행할 예정이다. 그래도 초기 설정은 아래 글에 있으니 꼭 참고해야 될 것 

 

2020/10/09 - [IT/JAVA] - macOS mysql 설치 & eclipse java 연동

 

macOS mysql 설치 & eclipse java 연동

macOS 에서 oracle를 사용하려면 복잡하지만 MySQL은 간단하다고 한다. 그래서 MySQL을 설치하고 사용할 것! macOS 용 패키지 관리자 Homebrew를 이용하여 설치할 것이다. Homebrew를 이용하면 설정 과정이

song-yujin.tistory.com


 

4. MySQL Workbench 사용


 

workbench에서 eer diagram을 만들어준다. (본인이 설계한 디비를 기반으로!)

 

 

 

 

다 완성했으면 상단에 Database > Forward Engineer.. 를 눌러서 진행해주면 알아서 테이블을 만들어준다!!!

 

 

 

이런식으로 쭉 가서... 

 

입력해주고....

 

테이블의 제약조건이 이상할 경우에는 에러가 난다. 

 

 

 

다 완성을 하면 Home으로 돌아가서 MySQL Connections 옆에 + 버튼을 눌러서 새로 만들어준다.

 

 

 

 

 

그리고 이렇게 알맞게 작성해주면 된다! 

 

끄으으으읕~!@!~!~!~!~!❤

 

 

 

 

 

 

[이전 글]

2021/01/12 - [IT/spring] - [투표사이트만들기] Eclipse에 Lombok 설치하기 - 2

 

[투표사이트만들기] Eclipse에 Lombok 설치하기 - 2

[이전 글] 2021/01/11 - [IT/spring] - [투표사이트만들기] Eclipse에서 Spring boot 설치하기 - 1 spring boot 설치 thyemleaf 설치 mysql 설치 실행해보기 1. Eclipse" data-og-host="song-yujin.tistory.com" d..

song-yujin.tistory.com

 


 

 

3. Eclipse에서 Thymeleaf 설치 & 프로젝트 적용 


제목에 " Thymeleaf 설치 & 프로젝트 적용"이라고 작성한 이유가 있다. 

 

일단 (1) spring boot처럼 marketplace에서 설치하는 방법(2) 프로젝트에 추가해주는 방법이 있다. 

 

(1)  spring boot처럼 marketplace에서 설치하는 방법

: Eclipse에서 Thymeleaf 플로그인 설치한다는 의미는 지금 쓰고 있는 개발 도구인 Eclipse에서 Thymeleaf 개발을 편리하게 하기 위한 도구를 설치하는 것

 

(2) 프로젝트에 추가해주는 방법

: 프로젝트에 Thymeleaf라는 라이브러리 의존성을 추가하는 것  (프젝에서 사용하려면 꼭 추가해야 됨!)

 

 

나는 1번째는 하지 않고 2번째 프로젝트에 추가해주기만 했다. (2번째 방법은 꼭 해야 될 것!)

 

(1) Marketplace에서 설치하는 방법 

thymeleaf도 마찬가지로 help > Eclipse Marketplace를 들어간다.

 

 

 

검색 후 install 해주면 끝!

 

 

 

 

 

(2) 프로젝트에 추가 

 

 

이전 글에서 생성한 VotingHomePage 프로젝트에서 build.gradle 들어가서 

 

 

dependencies 안에다가  아래 한 줄을 추가해준다. 

implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'

 

그리고!!!!!

gradle을 수정했으면 반드시! refresh를 해줘야 한다! 안 그러면 적용이 안된다. 

build.gradle 위에서 우클릭을 눌러서 Gradle > Refresh Gradle Project 해주면 된다.

 

 

 

※ 그리고 여기서부터는 타임리프의 함수를 사용할 수 있고 ctrl + space 눌렀을 때 보일 수 있게(?) 하기 위한 설정이다. 

 

 

 

help > Install New Software 들어간다.

 

 

 

 

 

 

http://www.thymeleaf.org/eclipse-plugin-update-site/

work with에 링크를 넣어주고 이름도 적어줘서 쭉 진행해주면 끝이다!

 

 

파이널 프로젝트로 투표 사이트를 만든다. 

개발하기 전에 개발 환경 설정을 기록하려고 한다. 

아래 목차 순서대로 정리할 것임! 

 

<목차>

  • spring boot 설치
  • Lombok 설치
  • thyemleaf 설치
  • mysql 설치
  • 실행해보기

 

 

1. Eclipse에서 Spring boot 설치


이클립스 상단에 Help > Eclipse MarketPlace 로 들어간다. 

 

 

 

 

 

 

find에서 sts 단어만 작성해주면 표시한 Spring Tools 4 를 볼 수 있다. 이것을 install 할 것!

 

 

 

 

 

 

설치가 다 끝났으면 프로젝트를 만든다. (Spring Starter Project를 선택)

 

 

 

 

 

 

프로젝트 이름을 작성해주고 각 설정에 맞춰서 선택해주었다. 

 

 

 

 

 

 

엄청 많은 의존성이 있지만 내가 설정한 것은 오른쪽 나와있는 7가지이다. 

다 추가해주고 마지막 Finish 를 눌러준다. 

 

 

그럼 일단 spring boot 설치와 프로젝트 만들기 성공~!~!

 

 

 

 

 

 

 

수업 시간에 배웠던 JUnit5 단위 테스트를 작성해볼까 한당!ㅇㅅㅇ

 

우선! 간단하게 단위 테스트가 무엇인지 정리하고 실습을 할 것이다. 

(진짜 간단하게........)

 

1. 단위 테스트  

단위 테스트는 가장 기본적인 테스트 활동이다. 

 

1-1) 단위 테스트 특징

  • 개발 환경에서 수행
  • 단위(주로 module, component, sub program, class, method) 간의 연계는 고려하지 않으며 단위 내부의 결함 제거가 목적
  • 주로 구조 기반 테스트 설계 기법을 사용 (Whitebox Test)
Q) Whitebox vs Blackbox ??

소프트웨어 테스트 방법론 2가지를 소개하면 화이트박스와 블랙박스이다.

Whitebox = 구조 기반 : 구조(structure based)를 기반으로 하는 테스트로, 내부구조를 분석해 테스트 케이스 도출. (단위 테스트는 개발 환경에서 수행하니까 여기에 해당)

Blackbox = 명세 기반 : 사용자가 요구하는 기능을 측정하기 위해서 내부구조를 모르는 상태로 테스트를 진행하는 방법 

경험 기반 : 테스트 엔지니어의 경험, 지식과 직관에 기반하여 테스트 케이스 도출

 

<whiteBox 테스트>

화이트 박스 테스팅을 하기 위해서는 프로그램 내부 구조를 분석해야 한다. 

그리고 테스트하려는 단위를 결정할 때 프로그램 코드상의 수행경로를 정의하고, 그 경로를 커버하는 테스트 케이스를 수행하면 된다. 

 

코드 적용 수준, 즉 수행범위(레벨)에 따라 구문 커버리지, 결정 커버리지, 조건 커버리지 등  있다.

 

 

 

1-2) 단위 테스트 목표

그러면 이번에 실습해볼 구조 기반인 단위 테스트의 목표는 무엇인가!?

 

  • 프로그램상의 모든 경로들을 최소한 한 번은 테스트하는 것

 

2. JUnit5 실습 

실습을 해볼 것은 자바에서 동작하는, 아키텍처가 필요없는 하나의 모듈이 하나의 프로그램이 되는 요구사항이 있었고, 

이것을 가지고 단위 테스트를 할 것이다. 

 

 

2-1) 테스트 대상 - 삼각형 종류 

 

Q) 삼각형의 변의 길이를 나타내는 세 정수 값을 입력하여 삼각형이 부등변 삼각형인지, 이등변 또는 정삼각형인지 보여준다.

 

먼저 소스 코드를 작성한다.

> 코드 참고

더보기
import java.util.Scanner;

public class TriangleProperty {

  public static void main(String[] args) {

    int a, b, c;
    String result;

    Scanner scanner = new Scanner(System.in);
    a = scanner.nextInt();
    b = scanner.nextInt();
    c = scanner.nextInt();

    scanner.close();

    result = classifyTriangle(a, b, c);

    System.out.println(result);
  }

  public static String classifyTriangle(int a, int b, int c) {

    if ((a + b <= c) || (a + c <= b) || (b + c <= a))
      return "Invalid";

    if (a == b && b == c)
      return "정삼각형";

    if (a == b || b == c || a == c)
      return "이등변삼각형";

    return "비등변삼각형";
  }

}

 

 

앞에서 말한

"그리고 테스트하려는 단위를 결정할 때 프로그램 코드상의 수행경로를 정의하고, 그 경로를 커버하는 테스트 케이스를 수행하면 된다. "

=> 여기서 세 정수를 입력 받아 정삼각형인지 이등변, 비등변삼각형인지 알아보는 수행경로를 정의했고, 

     classifyTriangle 메소드 단위를 테스트할 것이다.

 

 

 

JUnit5 도구를 사용할 것인데 JDK에 설치되어 있다.

프로젝트 오른쪽 버튼을 눌러서 Build Path > Add Libraries 눌러서  JUnit 선택하면 된다.

 

2-2) 테스트 실행 

 

그리고 작성한 TriangleProperty.java 클래스 파일에 오른쪽 버튼을 눌러서 JUnit Test Case 선택해서 생성해준다.

 

 

> 코드 참고

더보기
package communication;

import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;


class TrianglePropertyTest {

  @Test
  final void 정삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(1, 1, 1);
    assertTrue(result.contentEquals("정삼각형"));
  }

  @Test
  final void 이등변삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(2, 2, 3);
    assertTrue(result.contentEquals("이등변삼각형"));
  }

  @Test
  final void 삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(1, 2, 3);
    assertTrue(result.contentEquals("Invalid"));
  }

  @Test
  final void 비등변삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(3, 4, 5);
    assertTrue(result.contentEquals("비등변삼각형"));
  }


}

 

 

알아보기 쉽도록 일단 메소드명을 한글로 작성했다. 

이렇게 코드를 작성해주고 아래처럼 Coverage As > JUnit Test 실행한다.

 

테스트가 잘 되었다면 아래처럼 파란색으로 표시가 된다. 틀렸을 경우에는 빨간색으로 표시가 된다.

>코드 참고

더보기
package communication;

import static org.junit.jupiter.api.Assertions.*;
import org.junit.jupiter.api.Test;


class TrianglePropertyTest {

  @Test
  final void 정삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(1, 1, 1);
    assertTrue(result.contentEquals("정삼각형"));
  }

  @Test
  final void 이등변삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(2, 2, 3);
    assertTrue(result.contentEquals("이등변삼각형"));
  }

  @Test
  final void 삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(1, 2, 3);
    assertTrue(result.contentEquals("Invalid"));
  }

  @Test
  final void 비등변삼각형테스트() {

    String result = TriangleProperty.classifyTriangle(3, 4, 5);
    assertTrue(result.contentEquals("비등변삼각형"));
  }


}

 

 

아래 Coverage를 봐도 TrianglePropertyTest.java 보면 커버리지가 100%된 것을 확인할 수 있다. 

되도록이면 커버리지가 100% 가깝게 해주는게 좋다.

 

여기서!!!!

TriangleProperty.java를 보면 57.6% 밖에 안되어있는데 신경쓰지 않아도 된다. 

위에 빨간 부분들은 적용 범위가 아니기 때문에..

그리고 또 하나!!!더!!

노란색으로 표시되어있는 것은 모든 경우의 수를 충족하지 않았을 경우이다. 

 

노란색을 초록색으로 바꾸고 싶다면 아래처럼 모든 경우를 다 작성해서 테스트하면 된다.!

 

 

오른쪽 Add 버튼 눌러서 import 하고 싶은 프로젝트를 추가해주면 된다!

회사에서 자바 프로젝트로 채팅 프로그램을 만들었다. 

swing을 이용한 소켓 채팅 프로그램........

처음에 스윙이 뭐지?하면서 코드가 어색했는데 지금은 너무 익숙하다ㅋㅋㅋ 

 

너무 힘들었던 3가지를 기록해야겠따..흑흑

 

1) 채팅할 때 화면에 나오는 나는 오른쪽, 친구는 왼쪽 정렬이 너무 어려웠다.
하아ㅏㅏㅏㅏ 이걸로 거의 일주일은 날린 것 같다.

처음에 JTextArea를 사용했다. 그런데 왼쪽, 오른쪽 정렬이 따로 되지 않는 것과 이미지는 불가능하다는 것.

그래서 구글링하다가 JTextPane을 발견했다. 이것을 사용하면 될 것 같은데 정보가 많이 없었다..ㅠㅅㅠ

일주일동안 삽질하다가 인턴 같이 하는 오빠가 메소드 하나하나씩 분석해가면서 성공시켰다.!!!!!!!!!!!!!!!!!!!!!!

덕분에 잘 적용할 수 있었다. 고마워요...

 

아 지금 이거 적다가 나머지 힘들었던 2가지가 기억나질 않는다. (큰일) 2가지만 적어야지..

 

   

2) 그룹채팅이 아니라 1대 1 채팅 만든 것. 

이것저것 참고해가면서 채팅 프로그램을 만드는데 보통 다 그룹채팅 형식이었다.
(서버쪽에서 연결된 모든 클라이언트를 저장하는데, 메시지를 받고 보낼 때 모든 클라이언트한테 전송함 - 조건을 주지 않으므로 더 간단함.)    
그래서 처음 소켓 통신 성공시키고 대화하는데 웃겼다. 내 아이디로 로그인해서 A친구 채팅방에 글을 쓰고 전송 누르면, A친구한테만 전달되는 것이 아니라 열려 있는 모든 채팅방 친구들한테 다 전달이 된다.ㅋㅋㅋ

하지만 내 채팅은... 카톡처럼 친구 리스트(?)를 누르면 그 친구랑 대화하도록 GUI를 만들어서 그럴 수 없다구,,,  1:1 이어야 한다구....  
결론은 성공시켰지만 생각보다 간단하지 않았다. 채팅창의 정보도 저장하고 있어야하고 보내는 사람, 받는 사람 비교
도 필요하고! 아 그냥 직접 해봐야 알 수 있는 것..

 

 

 

코드 정리를 더 완벽하게 하고 싶은데 여기서 마무리하려고 한다. 

시간을 길게 가진다고 되는 것이 아니라는 걸 너무 느꼈기 때문에...@!@!

나중에 폭풍성장하고 그때 다시 와서 보면 더 완벽하게 할 수 있지 않을까 싶다ㅎㅎㅎ


KEVotingTalk

  • 자바 스윙을 이용한 소켓 채팅 프로그램
  • 사용 기술 : JAVA
  • 설명 : 1 대 1 채팅 KEVotingTalk입니다. GUI를 구현하기 위해 swing을 이용했고 서버와 클라이언트는 소켓 통신을 통해 연결됩니다. 마지막으로 회원관리를 위해 MySQL DB 사용했습니다.
  • github : github.com/YuJinSong412/KEVotingTalk

 

  • 클래스 설명
    • client.datacommunication.ClientSocket.java : 클라이언트 측 송수신 파일
    • client.frame.ChatWindowFrame.java : 채팅 창 파일
    • client.frame.ChatWindowPanel.java : 채팅 화면 파일
    • client.frame.ErrorMessagePanel.java : 에러 화면 파일
    • client.frame.FriendListPanel.java : 친구 목록 화면 파일
    • client.frame.IndexPanel.java : 메인 화면 파일
    • client.frame.JoinMembershipPanel.java : 회원가입 화면 파일
    • client.frame.LoginPanel.java : 로그인 화면 파일
    • client.frame.MainFrame.java : 애플리케이션 창 파일
    • client.frame.MainPanel.java : 애플리케이션 시작 화면 파일
    • client.ClientLaunch.java : 클라이언트 실행 파일
    • controller.Controller.java : java와 DAO 사이의 중간 역할 파일
    • enums.AlignEnum : 채팅창 화면 오른쪽, 왼쪽 정렬 상수 파일
    • enums.CommonWord : 애플리케이션 상수 파일
    • server.datacommunication.Message.java : 메시지 정보 파일
    • server.datacommunication.ServerHandler.java : 서버 측의 송수신 파일
    • server.userdb.User.java : 사용자 정보 파일
    • server.userdb.UserDAO.java : DB의 데이터 접근 파일
    • server.userdb.userDB.sql : MySQL의 쿼리 파일
    • server.ServerLaunch.java : 서버 실행 파일
    • util.ColorSet.java : 애플리케이션 색깔 모음 파일
    • util.CommonPanel.java : 애플리케이션 기본 화면 파일
    • util.JFrameWindowClosingEventHandler.java : 창 닫는 이벤트 파일
    • util.MainPanelButton.java : 애프릴케이션 시작 버튼 파일
    • util.UseImageFile.java : 애플리케이션 이미지 파일
    • util.UserInfoPanel.java : 애플리케이션 이미지 파일
    • util.UserProfileButton.java : 친구 버튼 파일

 


ScreenShot

 

첫 화면

 

 

 

회원가입, 로그인 화면

 

 

 

에러 화면

 

 

 

메인 화면

 

 

 

나와의 채팅

 

 

 

 

이미지 첨부

 

 

1:1 채팅

+ Recent posts