6.5. 팀프로젝트 진행상황
로그인 로그 기능을 구현하기 위해 시도했던 단계.
List<MemberLoginlog> memberLoginlogs = memberlogRepository.findAll();
// 새로운 로그인 기록 객체 생성
MemberLoginlog newMemberLoginlog = new MemberLoginlog();
newMemberLoginlog.setMid(memberSecurityDTO.getMid());
newMemberLoginlog.setLoginlog(LocalDateTime.now());
// 새로운 로그인 기록 객체를 별도의 리스트에 추가
List<MemberLoginlog> newMemberLoginlogs = new ArrayList<>(memberLoginlogs);
newMemberLoginlogs.add(newMemberLoginlog);
// 새로운 로그인 기록들을 한 번에 저장
memberlogRepository.saveAll(newMemberLoginlogs);
MemberLoginlog entity수정
id값은 자동으로 생성되고, Mid,loginlog값을 그때마다 추가하는 식으로 하였다.
사용자 성별, 나이, 레벨 등의 정보도 추가할 예정이다.
@Entity
@Getter
@Builder
@Setter
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Table(name = "MEMBERLOGINLOG")
@SequenceGenerator(
name = "MEMBERLOGINLOG_SEQ_GENERATOR",
sequenceName = "MEMBERLOGINLOG_SEQ",
initialValue = 1,
allocationSize = 1
)
public class MemberLoginlog {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,
generator = "MEMBERLOGINLOG_SEQ_GENERATOR")
@Column(name = "id")
private Long id;
private String mid;
// private String usersex;
// private String userage;
// private long userlev;
private LocalDateTime loginlog;
}
sequence가 잘 반영되어서 저장되는지 테스트, Mid가 중복되어도 문제없이 저장되었다.
@SpringBootTest
//@Transactional
@ToString
class MemberLoginlogTest {
@Autowired
private MemberLogRepository memberLoginlogRepository;
@Test
void testMemberLoginlogSave() {
String[] mids = {"aa", "aa", "bb", "cc", "dd", "dd", "dd"};
int[] logs = {1, 2, 3, 4, 5, 6, 7};
for (int i = 0; i < mids.length; i++) {
// 새로운 MemberLoginlog 생성
MemberLoginlog memberLoginlog = MemberLoginlog.builder()
.mid(mids[i])
.loginlog(LocalDateTime.now())
.build();
// 저장
memberLoginlogRepository.save(memberLoginlog);
// 시퀀스로 생성된 ID 확인
Assertions.assertNotNull(memberLoginlog.getId());
}
}
}
소셜로그인 성공 핸들러에서 사용한 코드
소셜 로그인의 경우 mid에 memberSecurityDTO.getMid()를 사용하고, 일반 로그인 핸들러에서는 username을 사용한다.
MemberLoginlog memberLoginlog = MemberLoginlog.builder()
.mid(memberSecurityDTO.getMid())
.loginlog(LocalDateTime.now())
.build();
memberlogRepository.save(memberLoginlog);
id값이 중복되더라도 값을 누적하여 저장할 수 있을 거라 생각해서 계속 Id값을 고정했던것이 시간이 오래걸렸던 원인이라 생각한다.
이제 이 누적된 로그기록을 바탕으로 관리자 페이지에서 유의미한 정보를 얻을 수 있도록 할 것이다.