java공부

java eclipse에서 gson을 이용한 json으로 회원관리

이쟤키 2021. 9. 11. 14:37
반응형

회원관리를 IO를 이용해서 하는데 저장되는 방식이 영 맘에 들지 않아서 고민하고있었는데

json이라는 자바스크립트 방식의 데이터 저장방식을 보게 되었다.

한눈에 어떤 내용인지 보기 쉽게 정리되어 저장할 수 있어서 이 방법을 사용하게 되었다.

알아보니 java에서 사용하기 위해서는 gson을 이용해서 json을 이용할 수 있다고 한다.

 

https://mvnrepository.com/artifact/com.google.code.gson/gson

위 링크에서 gson을 버전별로 다운로드 할 수 있다.

 

다운로드 한 파일을 위처럼

진행하는 자바 프로젝트를 오른쪽 클릭해서 설정에 들어간 뒤

Java Build Path 항목의 Libraries의 Classpath에 넣어주면 이제 사용 할 수 있다.

 

회원관리 패키지 구조는 크게

Run, View, Member 이렇게 구성했다.

 

Run에서는 실행만 할 수 있도록 했다.

 

View에서는 눈에보이는 메뉴들을 모아 놓았다.

 

Member에는 IO뿐 아니라 VO그리고 여러 클래스를 넣어 관리했다.

특히

gson을 사용하여 데이터를 오가게 했는데

public class MemberIO {
	// 저장할 주소를 final로 묶음
	private final static String FILE_PATH = "files/member.json";
	// 데이터를 일단 ArrayList를 이용하여 저장하기 위해 선언
	ArrayList<Member> listMember = new ArrayList<>();
	
	public void writeJson(ArrayList<Member> list) {
		// 문자기반스트림 FileWriter를 사용
		FileWriter fw = null;
		// GsonBuilder를 이용해서 gson생성, setPrettyPrinting으로 예쁘게 출력
		Gson gson = new GsonBuilder().setPrettyPrinting().create();
		
		try {
			fw = new FileWriter(FILE_PATH);
			gson.toJson(list, fw);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fw.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		
	}
	
	public ArrayList<Member> readJson() {
		
		JsonReader reader = null;
		
		try {
			
			Gson gson = new GsonBuilder().setPrettyPrinting().create();
			reader = new JsonReader(new FileReader(FILE_PATH));
			// json데이터를 Member[]로 변환
			Member[] m = new Gson().fromJson(reader, Member[].class);
			// Memeber배열을 Arraylist로 넣어줌
			listMember.addAll(Arrays.asList(m));

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				reader.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		// ArrayList를 리턴
		return listMember;
		
	}

}

이런식으로 구성했고

회원 가입시 데이터를 넣고 뺄때

ArrayList로 계속 입출입하며 관리한다.

// 회원가입
public boolean joinMember(Member member) {
		// 저장된 전체 맴버정보를 가져옴
		list = memberIO.readJson();
		
		boolean bool = false;
		try {
			// 새로 추가된 맴버를 추가
			list.add(member);
			
			bool = true;
		} catch(NullPointerException e) {
			e.printStackTrace();
		}
		// 새로운 맴버정보가 추가된 전체정보를 새로 저장
		if(bool) {
			memberIO.writeJson(list);
		}
		
		return bool;
		
	}
	// 아이디가 중복되었는지 비교
	public boolean compareId(Member id) {

		boolean bool = true;
		// 전체 맴버정보를 받아옴
		list = memberIO.readJson();
		// for문을 돌려서 아이디가 중복되었는지 확인
		for(int i = 0; i < list.size(); i++) {
			if(id.getId().equals(list.get(i).getId())) {
				bool = false;
			}
		}
		
		return bool;
	}
	// 로그인시 아이디 비번이 존재하는지 확인
	public boolean compareIdPwForLogin(Member login) {
		
		boolean bool = false;
		
		list = memberIO.readJson();
		
		for(int i = 0; i < list.size(); i++) {
			if(login.getId().equals(list.get(i).getId()) && login.getPw().equals(list.get(i).getPw())) {
				bool = true;
			}
		}
		
		return bool;
	}

앞으로 필요한 것은

회원가입시 비밀번호의 필수 구성요소들을 고지하고 확인하는게 필요한 것 같다.

그리고

로그인 후에 어떤 내용을 넣을지 고민해 봐야겠다.