전체 446

[Daily Report] 22.01.20 - updatePost 작성 및 오류 원인 확인중

Memo 테이블에서 key를 자동 생성할 경우 l 현상 - @GeneratedValue(strategy= GenerationType.AUTO)를 사용 - 다음 에러 발생 … could not read a hi value … l 원인 - Hibernate 자체적으로 사용하는 hibernate_sequence 테이블이 없을 때 발생 - spring.jpa.hibernate.ddl-auto=update를 삭제했더니 table이 생성되지 않는듯 l 해결 - @GeneratedValue(strategy= GenerationType.IDENTITY)로 변경 - 해당 컬럼을 AUTO_INCREMENT로 설정 CrudRepository.save()에서 null이 아닌 값을 null로 판단 l 현상 - CrudRepos..

정리하기/DR 2022.01.20

[JAVA] Hash와 Thread-Safe

현재 개발중인 코드에서 DB 데이터를 읽어 한 table의 정보를 바탕으로 HashMap의 mapping table을 저장하여 사용합니다. 그런데 이 table의 정보가 바뀔 수 있고, 그럴 때마다 다시 DB에 접근하는 것이 비효율적이라 생각하였습니다. 그래서 DB 정보가 바뀔 때마다 이 table도 같이 변경하도록 구현하였습니다. 이 때 들었던 생각이 Thread-safe입니다. 현재는 table에 동시 접근하는 일이 없지만, DB와 sync를 맞추고 있는 이 테이블에서 동기화 처리하지 않으면 DB와 integrity가 깨질 수 있습니다. 그래서 제가 사용하는 자료구조가 동기화 처리를 하는지 확인해보아야했습니다. HashMap은 unsynchronized 현재 mapping table로 사용했던 클래스..

CS/언어 2022.01.19

[Daily Report] 22.01.19 - createPost, deletePost 작성

Memo Done l create/delete Post 추가 l updatePost - PostId-TistoryPostId table 필요 Todo l postId-TistoryPostId table - Category와 같이 mapper에 작성 l mapping table을 Vector로 변경 - 동기화 문제로 vector로 변경 필요 New List vs ArrayList l List는 인터페이스, ArrayList는 List를 구현 l List list = new ArrayList(); 로 사용을 권장 - List의 하위클래스(LinkedList 등)으로 사용 가능 Vector vs ArrayList l Vector는 동기화되어 쓰레드 하나씩만 접근 가능 - ArrayList는 동기화되지 않아 여..

정리하기/DR 2022.01.19

[Spring] 예외 처리시 Throws vs try-cat-finally

예외처리를 하는 방법으로 Throws와 try-cat 두 가지 방법이 있는데, 어떤 방식으로 예외처리를 사용하는 것이 좋을지 찾아보게 되었습니다. 어떤 예외처리를 사용할지에 대해 간단하게 다음 2가지 기준이 있었습니다. catch문에서 유의미한 처리를 할 수 있는 경우만 try-catch 사용 input parameter로 인한 오류의 경우 throws Exception 사용 CrudRepository Exception CrudRepository를 사용할 때는 따로 exception을 확인할 필요가 없는게 DataAccessException에 대해 built-in되어 있다고 합니다. NonTransientDataAccessException - DB에 존재하지 않는 id의 접근과 같이, 예외 원인이 정정되..

[Daily Report] 22.01.18 - updateCat 구현 및 Post부분 구현중

Memo Done l updateCat - catUpdateList로 update 가능하여 따로 API를 재호출하지 않음 - throws 추가 Todo l createPost - 새로 생성된 category로 인한 catMapTable 업데이트 필요 New Throws Exception or try-catch-finally l catch문에서 유의미한 처리를 할 수 있는 경우만 try-catch 사용 - input parameter로 인한 오류의 경우 throws Exception 사용 Things to know

정리하기/DR 2022.01.18

[Spring] CrudRepository의 save vs saveAll

프로젝트를 하면서 데이터를 저장하는 부분을 구현하고 있었습니다. CrudRepository에는 Iterable을 input으로 여러 tuple을 저장하는 메서드인 saveAll을 제공하고 있습니다. 그런데 제가 구현하는 부분에서는 loop에서 여러 tuple을 save로 저장하고 싶었습니다. 두 메서드의 속도에 차이가 있을까요? save가 오래걸리지 않을까? 저는 단순하게 여러번 쿼리를 날리는 것보다 한 번 쿼리를 날리는 것이 더 시간이 덜 소요될 것이라 생각했습니다. 예를 들어 100개의 tuple을 저장해야한다고 했을 때, save 메서드로 tuple 하나마다 데이터베이스에 요청을 날리면, 데이터베이스는 쿼리가 올 때마다 해당 데이터를 저장하기위해 저장장치에 접근할 것이라 생각했기 때문입니다. sav..

[Daily Report] 22.01.14 - Category 동기화를 위한 메서드 구현 (진행중)

Memo TistorySyncExecuter l creteCat 작업 메모 - Tistory API로 데이터 받아오기 - Category/TistoryCategory에 파싱 - Category/TistoryCategory에 save - (필요)TistoryXMLParser에서 insert를 위한 전체 데이터 파싱 구현 - (필요)Category/Post Repository 생성 ToDo l createCat에서 DB에 save - transaction을 고려한 메서드 만들기 - 특정 loop만큼 saveAll New l ArrayList에서 Object member가 특정값을 갖는 Object 찾기 - list.stream().filter.filter( obj -> value.equals(obj.getM..

정리하기/DR 2022.01.14

[Daily Report] 22.01.13 - TistoryCategory 비교 메서드 구현

Memo DB Sync 처리 순서 l 정렬된 DB/Blog list 순차 비교 l Category를 DB에 추가 (tistoryCatId) - DB List가 end of list - DB의 id가 더 큰 경우 l Post를 DB에 추가 (tistoryPostId) - DB List가 end of list - DB의 id가 더 큰 경우 l Post를 DB에 변경 - tistoryPostDate가 다른 post 변경 (postTItle + postContent + postTags) - tistoryPostVisible이 다른 post 변경 l Post를 DB에 삭제 - Blog List가 end of list - Blog의 id가 더 큰 경우 l Category를 DB에 변경 - catName이 다른 ca..

정리하기/DR 2022.01.13