๐ย DB์ ์ ์ฅ๋๋ ๋ด์ฉ์ ํ์ผ์๋ ์ ์ฅํ์ฌ ํ์ผ์ ๋ง์น DB์ฒ๋ผ ์ฌ์ฉํ๋ ํ์ผ DB๋ฅผ ๋ง๋ค์ด ๋ณด๊ธฐ ํธ
DB์ ๋ด์ฉ์ ์ ์ฅํ๊ฑฐ๋ ์์ ํ ํ fileDB๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์์ ํ๋ค. fileDB์ ์ ์ฅ๋๊ธฐ ์ ์ ๋ฌธ์ ๊ฐ ์๊ฒจ๋ DB ๋ด์ฉ์ ๋ณด๊ณ ๋ณต๊ตฌํ ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ผ DB๋ฅผ ์ํ MemberFileRepository ์ธํฐํ์ด์ค๋ฅผ ์ถ๊ฐํ๋ค. ํ์์ด ์ถ๊ฐ๋ ๋ DB์ ์ ์ฅ๋๊ณ ๋ ํ saveOnFile() ํจ์๋ฅผ ํธ์ถํ๋ฉด ๊ฐ์ฒด๋ฅผ json string ํ์์ผ๋ก ๋ณํํด ์ฃผ๋ ObjectMapper๋ฅผ ์ฌ์ฉํด ํ์ผ์ write ํด์ฃผ์๋ค. (Object โ Serialize โ "JSONโ)
@Override
public void saveOnFile(MemberDao memberDao) throws IOException {
fileWriter = new FileWriter(fileDir + "fileDB", true);
bufferedWriter = new BufferedWriter(fileWriter);
ObjectMapper mapper = new ObjectMapper();
String jsonStr = mapper.writeValueAsString(memberDao);
try {
bufferedWriter.write(jsonStr);
bufferedWriter.newLine();
bufferedWriter.flush();
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
์ฐพ๊ณ ์ ํ๋ member์ id๋ฅผ ์ด์ฉํด ํ์ผ์์ ํ ์ค์ฉ ์ฝ์ด ์ฐพ๊ณ ์ ํ๋ id๋ฅผ ๊ฐ์ง ์ค์ ์ฐพ์ ๋ค์ memberDao ๊ฐ์ฒด๋ก ๋ณํํ์ฌ ๋ฆฌํดํ๋ค. ("JSON" โ Deserialize โ Object)
@Override
public MemberDao findByIdOnFile(Long memberId) {
Optional<String> out = null;
// ํ์ผ์์ ํด๋น id๋ฅผ ๊ฐ์ง ์ค ์ฐพ๊ธฐ
try {
fileReader = new FileReader(fileDir + "fileDB");
bufferedReader = new BufferedReader(fileReader);
File file = new File(fileDir + "fileDB");
out = Files.lines(file.toPath())
.filter(line -> line.contains("{\"id\":" + memberId))
.findAny();
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
ObjectMapper mapper = new ObjectMapper();
MemberDao memberDao = null;
try {
memberDao = mapper.readValue(out.get(), MemberDao.class);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
return memberDao;
}
DB์ ํ์์ ๋ณด๋ฅผ ๋ฐ๊พผ ๋ค fileDB์์ ๊ธฐ์กด ํ์์ ๋ํ ํ ์ค ๋ด์ฉ์ ์ง์ฐ๊ณ ์๋ก์ด ๋ด์ฉ์ ํ์์ ์ ์ฅํ๋ค.
@Override
public void updateOnFile(MemberDao memberDao) {
try {
deleteOnFile(memberDao.getId());
saveOnFile(memberDao);
} catch (IOException e) {
e.printStackTrace();
}
}
ํ์์ ์ญ์ ํ ๋ DB์์ ์ญ์ ํ๊ณ โ FileStore ํ์์ ํ์ผ์ ์ญ์ ํ๊ณ โ fileDB์์ ์ญ์ ํ๋ ์์ผ๋ก ์ญ์ ํ๋ค.
์ฒ์์ ํ์ผ์์ ํ ์ค์ ์ด๋ป๊ฒ ์ง์ธ์ง ๊ณ ๋ฏผํ๋๋ฐ sunhwang๋๊ป ๋ฌผ์ด๋ณด๋ java text file line delete๋ก ๊ฒ์ํ์ ์ https://stackoverflow.com/questions/1377279/find-a-line-in-a-file-and-remove-it ๊ฐ๋จํ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฐพ์์ฃผ์ จ๋ค. ๊ฒฝ๋ ฅ์ด ์์ผ์ ์ ๊ทธ๋ฐ์ง ์งฌ์ด ์ฅ๋์ด ์๋์๋ค. ๋๋ ์ ๊ฒ์ํ๋ ์ฌ๋์ด ๋์ด์ผ๊ฒ ๋ค.
@Override
public void deleteOnFile(Long id){
try {
fileReader = new FileReader(fileDir + "fileDB");
bufferedReader = new BufferedReader(fileReader);
File file = new File(fileDir + "fileDB");
List<String> out = Files.lines(file.toPath())
.filter(line-> !line.contains("{\"id\":" + id))
.collect(Collectors.toList());
Files.write(file.toPath(), out, StandardOpenOption.WRITE, StandardOpenOption.TRUNCATE_EXISTING);
} catch (IOException e) {
e.printStackTrace();
}
}
try-catch์ throws ๋์ค์ ๋ญ ์จ์ผ ํ๋์ง๋ ์์ง ๋ชจ๋ฅด๊ฒ ๋ค.๐ง
๋ค์์ ๋ก๊ทธ, AOP